분류 전체보기32 String, StringBuffer, StringBuilder 자바에서 문자열을 다루는 대표적인 클래스 String, StringBuffer, StringBuilder에 대해 알아보자. String vs StringBuffer, StringBuilder 3개의 클래스 중 String은 불변하는 속성을 가지고 있다. 즉 immutable class이고, StringBuffer와 StringBuilder는 가변 하는 클래스 mutable class이다. 우리는 간혹 하나의 변수에 다른 String 값을 넣고는 한다. 이때 JVM은 기존 String 변수의 값을 GC에 의해 제거하고, 새로운 값을 새로운 메모리 영역에 만들고 그것을 가리키게 된다. String str = "A"; // A는 GC에 의해 제거된다. // str에 B가 들어있는 메모리 영역을 가르키도록 변경.. 2020. 6. 27. [이펙티브 자바 : 2장] 모든 객체의 공통 메소드 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메소드 (equals, hashCode, toString, clone, finalize)는 모두 재정의(오버라이딩)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 그래서 Object를 상속하는 클래스, 즉 모든 클래스는 이 메소드들을 일반 규약에 맞게 재정의 해야 한다. 메소드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스(HashMap과 HashSet 등)를 오동작 하게 만들 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 equals 재정의가 필요치 않는 경우 하나. 각 인스턴스가 본질적으.. 2020. 6. 27. [이펙티브 자바 : 1장] 객체 생성과 파괴 [아이템 1] 생성자 대신 정적 팩토리 메서드를 고려하라 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 장점 하나 : 이름을 가질 수 있다. 생성자에 제공하는 인자가 반환하는 객체를 잘 설명하지 못할 경우에, 잘 만든 이름을 가진 정적 팩토리를 사용하는 것이 사용하기보다 더 쉽고 읽기 좋다. 그 예로 BigInteger(int, int, Random)과 BigInteger.probablePrime을 들고 있다. 또한, 생성자는 시그니처에 제약이 있다. 똑같은 타입을 파라미터로 받는 생성자 두 개를 만들 수 없으니까 그런 경우에도 정적 팩토리 메서드를 사용하는 것이 유리하다. // 생성자를 사용하는 경.. 2020. 6. 27. 캐시 메모리란? 캐시 부록 메모리 계층 구조 데이터를 저장하는 공간의 속도와 용량은 반비례 관계이다. 대체적으로 속도가 빠른 메모리는 저장공간이 작으며, 느린 메모리는 저장공간이 큰 특징을 가진다. 속도와 공간 두마리 토끼를 잡기에는 비용이 너무 커진다. 그렇기에 데이터 저장 공간은 속도와 용량에 따라 각자 특성에 맞게 역할을 나누어서 사용한다. 캐시 개요 컴퓨터 시스템의 성능을 향상시키기 위해 주로 CPU 칩 안에 포함되는 빠르고 작고 비싼 메모리이다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어한다. 대부분 프로그램은 한 번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있다. 데이터 지역성을 활용하여 캐.. 2020. 5. 24. 이전 1 2 3 4 5 6 7 8 다음