목차
Chapter 1 들어가면서#
Chapter 2 객체를 생성하고 파괴하기#
항목 1 : 생성자 대신 스태틱 팩토리 메소드를 고려하라#
항목 2 : private 생성자를 써서 싱글톤을 유지하라#
항목 3 : private 생성자로 인스턴스를 만들지 못하게 하라#
항목 4 : 쓸데없는 객체를 중복 생성하지 마라#
항목 5 : 쓸모 없는 객체 참조는 제거하라#
항목 6 : 종료자들을 쓰지 마라#
Chapter 3 모든 객체의 공통 메소드 구현하기#
항목 7 : equals 메소드를 재정의할 때 표준 구현계약을 지켜라#
항목 8 : equals 메소드를 재정의하면 hashCode 메소드도 반드시 재정의하라#
항목 9 : toString 메소드는 항상 재정의하는 것이 좋다#
항목 10 : clone 메소드는 신중하게 재정의하라#
항목 11 : Comparable 인터페이스의 구현을 고려하라#
Chapter 4 클래스와 인터페이스#
항목 12 : 클래스와 멤버에 대한 접근은 최소화하라#
항목 13 : 불변 클래스를 써라#
항목 14 : 상속보다 컴포지션을 써라#
항목 15 : 상속받을 수 있도록 설계하고 문서화하라. 아니면 상속을 금지하라#
항목 16 : 추상클래스보다는 인터페이스를 써라#
항목 17 : 인터페이스는 타입을 정의할 때만 써라#
항목 18 : 중첩 클래스는 정적 멤버 클래스로 정의하라#
Chapter 5 C 구문 바꾸기#
항목 19 : 구조체는 클래스로 바꿔라#
항목 20 : union은 클래스 계층 구조로 바꿔라#
항목 21 : enum 구문은 클래스로 바꿔라#
항목 22 : 함수 포인터를 클래스와 인터페이스로 바꿔라#
Chapter 6 메소드#
항목 23 : 인자의 유효성을 검사하라#
항목 24 : 필요한 경우 방어복사하라#
항목 25 : 메소드 시그니처를 신중하게 설계하라#
항목 26 : 메소드를 중복정의할 때는 신중하라#
항목 27 : 널(null)이 아닌 길이가 0인(zero-length) 배열을 리턴하라#
항목 28 : 외부에 제공하는 API의 모든 구성요소에 대해 문서화 주석을 달아라#
Chapter 7 프로그래밍 일반#
항목 29 : 지역 변수의 유효범위를 최소화하라#
항목 30 : 라이브러리를 배우고 익혀서 써라#
항목 31 : 정확한 계산에 float이나 double 타입을 쓰지 마라#
항목 32 : 적절한 타입 대신 문자열을 쓰지 마라#
항목 33 : 성능을 떨어뜨리는 문자열 연결을 조심하라#
항목 34 : 인터페이스 타입으로 객체를 참조하라#
항목 35 : 리플렉션보다 인터페이스를 써라#
항목 36 : 내이티브 메소드는 신중하게 써라#
항목 37 : 신중하게 최적화하라#
항목 38 : 일반 작명규칙을 지켜라#
Chapter 8 예외처리#
항목 39 : 예외는 예외상황에서만 써야 한다#
항목 40 : 처리해야 하는 예외와 런타임 예외를 구분해서 던져라#
항목 41 : 처리해야 하는 예외는 꼭 필요할 때만 던져라#
항목 42 : 표준 예외를 써라#
항목 43 : 예외를 적절하게 추상화하라#
항목 44 : 메소드가 던지는 모든 예외를 명세문서에 기술하라#
항목 45 : 실패에 대한 자세한 정보를 상세 메시지 문자열에 담아라#
항목 46 : 실패 원자성을 얻기 위해 노력하라#
항목 47 : 예외를 잡아서 버리지 마라#
Chapter 9 스레드#
항목 48 : 변경가능한 공유 데이터에 접근할 때 동기화하라#
항목 49 : 지나친 동기화는 피하라#
항목 50 : wait 메소드는 반복문 안에서만 호출하라#
항목 51 : 스레드 스케줄러에 의존하지 마라#
항목 52 : 스레드 안전성을 문서화하라#
항목 53 : 스레드 그룹을 쓰지 마라#
Chapter 10 직렬화#
항목 54 : Serializable 인터페이스는 신중하게 implements하라#
항목 55 : 맞춤 직렬화 형태를 사용하라#
항목 56 : readObject 메소드는 모든 공격을 방어할 수 있도록 작성하라#
항목 57 : 필요하다면 readResolve 메소드를 제공하라#