Clean Code that Works.

1. Serializable 인터페이스는 신중하게 implements 하라

2. 맞춤 직혈화 형태를 사용하라

3. readObject 메소드는 모든 공격을 방어할 수 있도록 작성하라..

4. 필요하다면 readResolve 메소드를 제공하라

1. 변경가능한 공유 데이터에 접근할 때 동기화하라

2. 지나친 동기화는 피하라

3. wait 메소드는 반복문 안에서만 호출하라

4. 스레드 스케줄러에 의존하지 마라

5. 스레드 안정성을 문서화 하라

6. 스레드 그룹을 쓰지 마라

1. 예외는 예외상황에서만 써야 한다.

2. 처리해야 하는 예외와 런타임 예외를 구분해서 던져라

3. 처리해야 하는 예외는 꼭 필요할 때만 던져라

4. 표준 예외를 써라

5. 예외를 적절하게 추상화하라

6. 메소드가 던지는 모든 예외를 명세문서에 기술하라

7. 실패에 대한 자세한 정보를 상세 메시지 문자열에 담아라

8. 실패의 원자성을 얻기 위해 노력하라

9. 예외를 잡아서 버리지 마라

1. 지역 변수의 유효범위를 최소화 하라

2. 라이브러리를 배우고 익혀서 써라

3. 정확한 게산에 float이나 double 타입을 쓰지 마라

4. 적절한 타입 대신 문자열을 쓰지 마라

5. 성능을 떨어뜨리는 문자열 연결을 조심하라

6. 인터페이스타입으로 객체를 참조하라

7. 리플렉션 보다는 인터페이스를 써라

8. 네이티브 메소드는 신중하게 써라

9. 신중하게 최적화 하라

10. 일반 작명규칙을 지켜라

1. 인자의 유효성을 검사하라

2. 필요한 경우 방어복사를 하라

3. 메소드 시그니처를 신중하게 설계하라

4.메소드를 중복정의할 때는 신중하라

5. Null이 아닌 길이가 0인 배열을 리턴하라

6. 외부에서 제공하는 API의 모든 구성요소에 대해 문서화 주석을 달아라

1. 구조체는 클래스로 바꿔라

2. union은 클래스 계층 구조로 바꿔라

3. enum 구문은 클래스로 바꿔라

4. 함수 포인터를 클래스와 인터페이스로 바꿔라

출처. effective java

1. 클래스와 멤버에 대한 접근은 최소화하라

2. 불변 클래스를 써라

3. 상속보다 컴포지션을 써라

4. 상속받을 수 있도록 설계화하고 문서화하라, 아니면 상속을 금지하라

5. 추상클래스보다는 인터페이스를 써라

6. 인터페이스는 타입을 정의할 때만 써라

7. 중첩 클래스는 정적 멤버 클래스로 정의하라

출처. effective java

1. 클래스와 멤버에 대한 접근은 최소화하라

2. 불변 클래스를 써라

3. 상속보다 컴포지션을 써라

4. 상속받을 수 있도록 설계화하고 문서화하라, 아니면 상속을 금지하라

5. 추상클래스보다는 인터페이스를 써라

6. 인터페이스는 타입을 정의할 때만 써라

7. 중첩 클래스는 정적 멤버 클래스로 정의하라

출처. effective java

1. equals 메소드를 재정의할 때 표준 구현계약을 지켜라

2. equals 메소드를 재정의하면 hashCode 메소드도 반드시 재정의하라

3. toString 메소드는 항상 재정의하는 것이 좋다.

4. clone메소드는 신중하게 재정의 하라.

5. Comparable 인터페이스의 구현을 고려하라.


출처. effective java

1. 생성자 대신 스태틱 팩토리 메소드를 고려하라.
 
2. private 생성자를 써서 싱클톤을 유지하라.

3. private 생성자로 인스턴스를 만들지 못하게 하라.

4. 쓸데없는 객체를 중복 생성하지 마라.

5. 쓸모 없는 객체 참조는 제거하라.

6. 종료자들을 쓰지 마라.

출처. effective java