본문 바로가기
공부 기록

[클리코드] 10장. 클래스

by 매트(Mat) 2024. 4. 26.

10장. 클래스

이 장에서는 깨끗한 클래스를 다룬다.

클래스 체계

  • 캡슐화: 리팩토링에서도 다루었지만 클래스의 멤버변수는 private으로 은폐시켜야 한다.

클래스는 작아야 한다.

클래스를 만들 때 중요한 세 가지가 있다.

  • 클래스 크기가 작아야 한다.
  • 클래스 크기가 작아야 한다.
  • 클래스 크기가 작아야 한다.

SOLID 원칙에서도 SRP 즉, 하나의 클래스는 하나의 책임을 갖는 단일 책임 원칙이 있다. 이는 스프링을 배웠다면 당연하게 여길 것이다. 실제 하나의 클래스에 많은 책임이 있다면 유지보수하기가 굉장히 어려워진다. (그래서 Layer를 분리한 것도 있다.)

서랍으로 비유하면 아래 선택지에서 어떤 것을 선호하는가?

  1. 많은 서랍이 있고, 각 서랍별로 물건들을 분류해놓은 상태
  2. 하나의 서랍이 있고, 하나의 서랍안에 모든 물건들을 보관한 상태

선택은 자유지만 우리는 혼자 개발하는 것이 아니기 때문에 2번을 선택하지 않길 바란다.

다음으로 응집도를 살펴보자. 응집도가 높다는건 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미이다. 따라서 우리는 응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스 두세 개로 쪼개주는 것이 좋다.

즉, 응집도를 높인다는 것은 클래스를 분리함으로써 클래스 수가 많아진다는 것을 의미한다. 이는 클래스를 만들 때 중요한 원칙인 크기가 작아야 한다는 것에 매칭된다. 클래스를 쪼갤수록 높은 응집도를 만들 수 있다. 클래스를 쪼갠다는 것은 또한 관심사를 분리하는 것을 의미한다.

이번에는 결합도를 살펴보자. 결합도가 낮다는건 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. 이것은 매우 중요한 말이다. 다른 모듈로부터 의존되지 말아야 해당 모듈이 가치가 있는 것이고, 해당 모듈을 건드려도 다른 모듈은 전혀 영향이 가지 않는다는 의미이다. 또한 시스템 요소가 서로 잘 격리되어 있으면 각 요소를 이해하기도 쉬워지기 떄문에 유지보수에도 수월해진다.

따라서 보통 좋은 설계라 함은 응집도를 높이고, 결합도를 낮추라는 말이다.

변경하기 쉬운 클래스

대다수 시스템은 지속적으로 변경된다. 이는 변경할 때마다 시스템이 의도대로 동작하지 않을 위험이 생긴다는 의미다. 하지만 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다.

이를 해결하기 위해 추상화 클래스인 인터페이스를 만들고, 각 구현체를 만들면 클래스를 분리시켰기 때문에 변경에 대한 위험이 사라진다. 다른 기능이 추가되면 인터페이스 규격에 맞는 구현체를 하나 생성하면 그만이다. 이렇게 되면 SRP는 물론이고 OCP 원칙도 지키게 된다. 기존 클래스를 건드리지 않아도 되는 것이다. 이를 역할과 구현을 분리했다고 하고, 이것이 관심사의 분리이다.

또한 결합도를 낮추게 되면 결국에 SOLID의 DIP 원칙을 지키게 되는데, DIP는 추상화에 의존해야지 구체화에 의존하면 안된다는 의미이다. 기본적으로 스프링은 SRP, OCP, DIP를 모두 해결해주기 떄문에 우리가 쉽게 스프링 프레임워크를 통해 개발할 수 있게 되는 것이다.

References

'공부 기록' 카테고리의 다른 글

[클린코드] 12장. 창발성  (1) 2024.05.02
[클린코드] 11장. 시스템  (0) 2024.05.01
[클린코드] 9장. 단위 테스트  (0) 2024.04.23
[클린코드] 8장. 경계  (0) 2024.04.22
[클린코드] 7장. 오류 처리  (1) 2024.04.19

댓글