변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다. <p.172>
클래스는 작아야 한다! <p.172>
함수가 물리적인 행 수로 크기를 측정했다면, 클래스는 맡은 책임을 센다. <p.173>
단일 책임 원칙(Single Resopnsibility Principle, SRP): 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙 <p.175>
하지만 작은 클래스가 많은 시스템이든 큰 클래스가 몇 개뿐인 시스템이든 돌아가는 부품은 그 수가 비슷하다. 그러므로 고민할 질문은 다음과 같다. "도구 상자를 어떻게 관리하고 싶은가?" <p.177>
응집도(Cohesion): 일반적으로 메서드가 변수를 더 많이 사용 할수록 메서드와 클래스는 응집도가 더 높다. 모든 인스턴스 변수를 메서드마다 사용하는 클래스는 응집도가 가장 높다. <p.177>
응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 떄문이다. <p.177>
응집도를 유지하면 작은 클래스 여럿이 나온다. > 클래스가 응집력을 잃는다면 쪼개라! <p.178>
변경하기 쉬운 클래스 <p.185>
대다수 시스템은 지속적인 변경이 가해진다. 그리고 뭔가 변경할 때마다 시스템이 의도대로 동작하지 않을 위험이 따른다. 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다. <p.188>
새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때 쓰템을 확장할 뿐 기존 코드를 변경하지는 않는다. <p.188>
테스트가 가능할 정도로 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. <p.190>
개념적으로만 많이 배우고 아직 실제로 제대로 사용해보지 못한 클래스에 대해서 배웠다. 클래스는 객체지향 프로그래밍을 하다보면 꼭 같이 나오는 개념이다. 알고는 있지만 제대로 사용해본 적은 없어, 개념적으로만 알고 있었는데 이번 기회에 예제 코드와 함께 볼 수 있어 좋은 경험이었다. 특히 클래스의 응집도나 결합도는 흥미로운 개념이었다.
응집도는 높을 수록 좋은데 서로 영향을 주어 코드가 난잡해지는 함수의 경우와 다르게 응집도 높은 클래스는 신기하게 느껴졌다.
개념은 확실하다. 응집도가 높을 수록 좋지만 코드가 길어지게되면 응집력을 잃기 마련이다. 이럴때는 과감하게 클래스를 분리하자. 응집력을 너무 잃은 클래스보다 쪼개져 응집력을 유지하고 있는 클래스가 옳다.
객체지향프로그래밍을 최근에 배우고 있지만 아직 클래스까지 상세하게 배우지는 않았다. OOT를 제대로 배우고 나서 이 장을 읽는다면 더 많은 것을 느끼고 배울 수 있을 거 같다. 어느정도 성장이 된다면 클린코드를 다시 한 번 정독할 생각이다.