> For the complete documentation index, see [llms.txt](https://develop-footprint.gitbook.io/o/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://develop-footprint.gitbook.io/o/java/effective-java/4.md).

# 4장: 클래스와 인터페이스

- [item 15) 클래스와 멤버의 접근 권한을 최소화하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-15.md)
- [item 16) public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-16-public-public.md)
- [item 17) 변경 가능성을 최소화하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-17.md)
- [item 18) 상속보다는 컴포지션을 사용하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-18.md)
- [item 19) 상속을 고려해 설계하고 문서화하고, 그러지 않았다면 상속을 금지하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-19.md)
- [item 20) 추상 클래스보다는 인터페이스를 우선하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-20.md)
- [item 21) 인터페이스는 구현하는 쪽을 생각해 설계하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-21.md)
- [item 22) 인터페이스는 타입을 정의하는 용도로만 사용하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-22.md)
- [item 23) 태그 달린 클래스보다는 클래스 계층구조를 활용하라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-23.md)
- [item 24) 멤버 클래스는 되도록 static으로 만들라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-24-static.md)
- [item 25) 톱레벨 클래스는 한 파일에 하나만 담으라](https://develop-footprint.gitbook.io/o/java/effective-java/4/item-25.md)
