Clean Code that Works.

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

2. 불변 클래스를 써라

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

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

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

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

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

출처. effective java