클린코드 - 10.클래스
2022-02-27
클래스
- 클래스 체계
- 클래스를 정의하는 표준 자바 관례에 따르면, 가장 먼저 변수 목록이 나온다. 정적(static) 공개(public) 상수가 있다면 맨 처음에 나온다. 다음으로 정적 비공개(private) 변수가 나오며, 이어서 비공개 인스턴스 변수가 나온다. 공개 변수가 필요한 경우는 거의 없다.
- 변수 목록 다음에는 공개 함수가 나온다. 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려간다.
- 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다.
- 클래스는 작아야 한다!
- 클래스를 설계할 때도, 함수와 마찬가지로, ‘작게’가 기본 규칙이다.
- 클래스 이름은 해당 클래스 책임을 기술해야 한다.
- 클래스는 책임, 즉 변경할 이유가 하나여야 한다.(단일 책임 원칙)
- 응집도가 높은 클래스를 선호한다. 응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 때문이다.
- 응집도를 유지하면 작은 클래스 여럿이 나온다.
- 변경하기 쉬운 클래스
- 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다.(개방 폐쇄 원칙)
- 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.(개방 폐쇄 원칙)
- 상세한 구현에 의존하는 코드는 테스트가 어렵다. 테스트가 가능할 정도로 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. 시스템 요소가 서로 잘 격리되어 있으면 각 요소를 이해하기도 더 쉬워진다.
- 결합도를 최소로 줄이면 자연습럽게 의존 역전 원칙을 따르는 클래스가 나온다. 의존 역전 원칙은 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙이다.