깡뇽

[Clean Code] 클린 코드 - 10장 클래스 본문

Book/Clean Code

[Clean Code] 클린 코드 - 10장 클래스

깡뇽 2022. 3. 9. 12:03
반응형

함수보다 더 높은 단계인 클래스 코드를 깨끗하게 작성하도록 해야 한다.

 

클래스 체계

자바를 사용하면 "변수 목록, 정적 공개 상수, 정적 비공개 변수, 비공개 인스턴스 변수, (공개 변수), 공개함수, 비공개 함수" 의 순서로 추상화 단계에 따라서 나타난다.

 

- 캡슐화

변수와 유틸리티 함수는 공개하지 않는 편이 낫지만 꼭 숨겨야 하는 것은 아니다. 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 하면 해당 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다. 캡슐화에 대한 결정은 마지막 수단이다.

 

클래스는 작아야 한다!

함수 작성과 마찬가지로 클래스도 작을수록 좋은데 메서드의 개수를 줄여야 하며, 클래스의 역할을 반영하는 적절한 간결한 이름을 지을 수 있어야 한다.

 

- 단일 책임 원칙

Single Responsibility Principle(SRP)은 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다는 원칙이다.

즉, 클래스가 맡은 책임이 하나가 되도록 작고 체계적이도록 한다.

 

- 응집도

클래스는 인스턴스 변수 수가 작아야 하고, 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.

일반적으로 메서드가 변수를 많이 사용할 수록 이 둘의 응집도가 높아지는데 이는 사람들에게 선호되지만(논리적인 단위라는 이류로) 바람직하지 않다.

 

- 응집도를 유지하면 작은 클래스 여럿이 나온다

함수와 클래스를 작게 쪼개어서 프로그램을 체계적이도록 할 수 있다.

 

변경하기 쉬운 클래스

코드 하나를 수정하는 것은 추후에 어떤 결과를 일으킬지 모르기 때문에 조심해야 한다. 비공개 메서드를 파생 클래스로 옮기고, 모든 파생 클래스가 공통적으로 사용하는 비공개 메서드를 유틸리티 클래스에 넣는 등의 작업을 통해서 클래스를 단순하게 분리할 수 있다. 

즉, 코드를 수정하더라도 다른 코드가 영향을 받을 걱정을 하지 않아도 되고 SRP와 OCP(Open-Closed Principle)을 지원하는 좋은 코드를 만들어 낼 수 있다. 

* OCP(Open-Closed Principle) 클래스 : 확장에 개방적이고 수정에 폐쇄적이어야 한다는 원칙

새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.

 

- 변경으로부터 격리

구체적인 클래스 : 상세한 구현(코드)를 포함

추상 클래스 : 개념만 포함

상세한 구현을 요구하는 코드는 테스트가 어려운데 시스템의 결합도를 낮추어 유연성과 재사용성을 높일 수 있다. 시스템 요소를 격리시킴으로써 각 요소를 이해하기 쉽게 만들고 DIP를 따르는 클래스를 만들 수 있다.

* DIP(Dependency Inversion Principle) : 클래스는 상세한 구현이 아닌 추상화에 의존해야 한다는 원칙

 


최대한 작게 만들고, 의존성을 낮춰 코드를 체계적이고 리팩토링이 용이하도록 해야 한다는 것이 클린 코드에서 자주 강조되는 점인 것 같다. 코드를 동작하는 것에 집중하여 코드를 완성시키고 그 이후에는 더 나은 코드로 수정하기 위한 노력도 필요하다는 생각을 했다. 내가 짠 코드라도 시간이 지나고 보면 이게 뭐지? 싶을 때가 있는데 클린 코드는 그런 상황을 줄여줄 수 있을 것이다. 

 

TIL 14회차

반응형