티스토리 뷰

Books

[Clean Code] #10 클래스

U_pic 2022. 5. 9. 16:57

클래스 체계

 

클래스를 정의하면 변수에 대한 내용을 먼저 정의한다. static, public상수를 먼저 정의하고 그다음 private 변수를 정의한다.

( 클래스를 정의하는 부분에 대해서는 전혀 몰라 책의 내용을 그대로 가져왔습니다.)

 

변수와 유틸리티 함수에 대해서는 최대한 숨기는 것을 원칙으로 한다고 한다.

테스트 코드 작성을 위해서 protected로 선언하여 접근을 허용하기도 하지만 최대한 private으로 정의하는 것을 우선으로 하여 정의한다. (캡슐화)

 

클래스의 크기

 

클래스의 크기는 무조건 작으면 작을수록 좋다고 한다.

그렇다면 얼마나 작아야 하는가?

 

책에서는 클래스가 너무 많은 '책임'을 가지고 있는 것은 부적절하다고 한다.

 

단일 책임의 원칙

단일 책임의 원칙(Single Responsibility Principle, SRP)은 클래스 또는 모듈을 변경하는 이유가 단 하나뿐이어야 한다는 것을 의미한다.

SRP는 '책임'이라는 의미를 여기서 사용하였고, '책임'을 통해 클래스의 크기를 상대적으로 알 수 있도록 하였다.

 

'책임'에 대해서 인지하고 코드를 작성하면 추상화가 수월해지고, 깨끗하고 체계적인 클래스를 설계할 수 있다.

 

큰 클래스 하나를 정의하는 것보다 작은 클래스를 여러 개 선언하고 묶어서 사용하는 것이 이후 유지보수 부분에서도 더 뛰어나지 않을까 하는 생각을 해보았다.

 

응집도 (Cohesion)

클래스 메서드는 클래스 인스턴스 변수를 사용하게 되는데, 이 메서드가 인스턴스 변수를 많이 사용할수록 응집도가 높은 것이다.

응집도가 높다는 것은 그만큼 서로 의존성이 높고, 논리적인 단위로 묶인다는 것을 의미한다.

 

만약 메서드가 특정 인스턴스 변수만 사용하는 모습이 보이면, 클래스를 쪼개서 사용하는 것이 응집도를 높이는 방식이고, 바람직한 방식이라고 한다.

 

 

변경하기 쉬운 클래스

개발을 하면서 변화를 만나고, 수정해야 하는 상황은 무수히 발생한다. 이때 뭔가를 변경할 때 의도하지 않았던 부분을 건드려서 새로운 에러를 만날 위험이 있다.

클린 한 시스템은 이런 위험성을 줄이고 변화를 적용하기 쉽게 개발되어 있다.

 

변경으로부터 격리

클래스는 상세 구현이 모두 포함되어있는 클래스, 객체의 개념만 가지고 있는 추상 클래스가 있다.

여기서 상세 구현이 포함되어 있는 클래스를 변화를 만나면 내부 구현에 대한 코드라인까지 수정해야 하기 때문에 위험성이 커질 수 있다.

그래서 추상 클래스를 활용하여 구현에 미치는 영향을 줄이도록 해야 한다.

 

추상 클래스를 활용하면 시스템의 결합도를 낮추면 유연성과 재사용성이 높아진다.

결합도가 낮다는 것은 변화에 의해 다른 요소가 영향을 받는 정도가 작다는 것을 의미한다.

'Books' 카테고리의 다른 글

[GraphQL] 1장 GraphQL이란  (0) 2022.06.02
[Clean Code] #13 동시성  (0) 2022.05.12
[Clean Code ] #12 창발성  (0) 2022.05.10
[Clean Code] #11 시스템  (0) 2022.05.10
[Clean Code] #9 단위 테스트  (0) 2022.05.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함