개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
클래스를 만들 때 첫 번째 규칙은 크기다.
클래스 이름은 해당 클래스 책임을 기술해야 한다.
단일 책임 원칙
TIL (Today I Learned) 날짜
2022. 05. 11
오늘 읽은 범위
10장. 클래스
책에서 기억하고 싶은 내용을 써보세요.
클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. 두 번째 규칙도 크기다. 더 작아야 한다.
작명은 클래스 크기를 줄이는 첫 번째 관문이다. 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 너무 커서 그렇다. 클래스 이름이 모호하다면 필경 클래스 책임이 너무 많아서다.
클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다. (Single Responsibility Principle)
우리들 대다수는 두뇌 용량에 한계가 있어 '깨끗하고 체계적인 소프트웨어'보다 '돌아가는 소프트웨어'에 초점을 맞춘다. ( ...중략... ) 문제는 우리들 대다수가 프로그램이 돌아가면 일이 끝났다고 여기는 데 있다. '깨끗하고 체계적인 소프트웨어'라는 다음 관심사로 전환하지 않는다.
"도구 상자를 어떻게 관리하고 싶은가? 작은 서랍을 많이 두고 기능과 이름이 명확한 컴포넌트를 나눠 넣고 싶은가? 아니면 큰 서람 몇개를 두고 모두를 던져 넣고 싶은가?"
강조하는 차원에서 한번 더 말하겠다. 큰 클래스 몇 개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다. 작은 클래스는 각자 맡은 책임이 하나며, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.
일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다. 모든 인스턴스 변수를 메스드마다 사용하는 클래스는 응집도가 가장 높다. 일반적으로 이처럼 응집도가 가장 높은 클래스는 가능하지도 바람직하지도 않다. 그렇지만 우리는 응집도가 높은 클래스를 선호한다. 응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 때문이다.
'함수를 작게, 매개변수 목록을 짧게'라는 적략을 따르다 보면 때때로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다. 이는 십중팔구 새로운 클래스로 쪼개야 한다는 신호다. 응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스 두 세 개로 쪼개준다.
깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다.
OCP (Open-Closed Principle) 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다.
결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리도어 있다는 의미다.
DIP (Dependency Inversion Principle) 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
매번 나오는 안좋은 예시는 왜 전부 내가 하고 있는 것인가 이쯤되면 문제가 크지 싶다. 순간에 편리함때문인지 깨끗하고 체계적인 소프트웨어 보다 돌아가는 소프트웨어에 초점을 두고, 돌아가면 일이 끝났다고 생각하던게 바로 내 모습이었다. 그러다 보면 하나의 클래스에 이것 저것 넣고 이름도 모호해지고, 인스턴스 변수의 수는 많아지고 그야말로 만능클래스가 생겨나기 일쑤다.
만능 클래스를 단일 클래스 여럿으로 분리하는 것 까지!