개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
한 클래스에 한 책임.
응집도를 유지하며 작은 클래스를 만들라.
클래스를 변경해야 한다면 그 이유도 하나에 국한돼야 한다.
TIL (Today I Learned) 날짜
2024.02.11
오늘 읽은 범위
10. 클래스
책에서 기억하고 싶은 내용을 써보세요.
<클래스 체계>
자바에서 관례적으로 볼 수 있는 클래스 정의: 정적 공개 상수 -> 정적 비공개 변수 -> 비공개 인스턴스 변수 -> 공개 함수 -> 비공개 함수는 자신을 호출하는 공개 함수 직후 등장 => 추상화의 단계가 순차적으로 내려가는 것을 볼 수 있다.
캡슐화: 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야하는 것은 아니다. 그러나 숨길 수 있으면 최대한 숨기는 것으로…캡슐화를 풀어주는 결정은 언제나 최후의 방법.
<클래스는 작아야 한다>
클래스를 만들 때 첫번째 규칙과 두번째 규칙일만큼 중요한 클래스의 크기. 클래스는 작아야 한다.
얼마나 작아야 하는가 ? 함수는 물리적인 행 수로 크기를 가늠하지만 클래스는 클래스가 맡은 책임으로 그 크기를 가늠한다.(예시에 공개 메서드 70개인 클래스는 내가 봐도 너무 하다…;;; 무슨 공개 메서드로만 페이지 한장 반을 넘냐;;;)
클래스 이름은 해당 클래스의 책임을 기술해야 한다. 클래스 작명은 클래스 크기를 줄이는 첫번째 관문. If, and, or, but을 사용하지 않고 25단어 내외로 가능해야 한다.
단일 책임 원칙(Single Responsibility Principle, SRP): 클래스나 모듈을 변경할 이유가 단 하나 뿐이어야한다는 원칙. 객체 지향 설계에서 매우 중요한 개념. (하지만 프로그램에 돌아가는데 중점을 맞추는 게 중요하다보니, 종종 무시하는 규칙 중에 하나가 되기도 한다…)
응집도: 클래스는 인스턴스 변수의 수가 작아야한다. 응집도를 유지하면 작은 클래스 여럿이 나온다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
클래스와 함수의 크기를 결정하는 것은 기본적으로 같은 의미인 것 같다. 맡은 책임이나 의미를 한가지로 정하거나 최소화하기. 예시에서 든 클래스(superDashboard)도 작다고 생각했는데, 책임이 너무 많으면 안된다는 부분을 보니 더 확실해졌다. 클래스 크기 내용을 읽으며 함수를 만드는 법에 대한 내용이 많이 오버랩 됐다. 근데 클래스 이름 짓는 단어수에서 25단어 내외로 가능해야 한다고 하는데, 25자 아니라 25단어인가…? 원문을 봐야할 것 같다 25단어라면 그것도 엄청 긴 것 같은데…?
지금은 자주 쓰지는 않지만 예전에 과제하며 C++을 사용했을 때 클래스 만들던 것을 떠올리며 이번 장을 읽었다. 이번 장에서는 예시가 특히나 눈에 잘 들어왔다. 끝이 없는 공개 메서드의 나열인 클래스부터, 변수들의 나열을 가지고 있는 한 함수를 가진 클래스며… 보면서 ‘이것이 실화인가, 진짜 이렇게 코드를 짜는 경우가 있다는 것인가…’하고 경악했다.
다른 사람들의 TIL