[Clean Code] 클린 코드 #Day 12 / 클래스

ChilihC·2022년 3월 9일
0

Clean Code

목록 보기
13/13
post-thumbnail

TIL(Today I Learned) 🧑🏻‍💻


10. 클래스


내용 정리 & 기억하고 싶은 내용

  • 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다. <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를 제대로 배우고 나서 이 장을 읽는다면 더 많은 것을 느끼고 배울 수 있을 거 같다. 어느정도 성장이 된다면 클린코드를 다시 한 번 정독할 생각이다.


새로 용어 정리


참고 문헌


profile
developer junior

0개의 댓글

관련 채용 정보