728x90
1. 클래스는 작아야 한다!
- 클래스가 맡은 책임이 적어야 한다.
- 클래스 이름은 해당 클래스 책임을 기술해야 한다. 클래스 이름을 짓기 어렵다면, 클래스 책임이 너무 많아서일 것이다.
1-1. 단일 책임 원칙
- 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다.
- 작은 클래스는 각자 맡은 책임이 하나이고, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.
1-2. 응집도
- 클래스는 인스턴스 변수의 수가 작아야 하고, 메서드는 인스턴스 변수를 하나 이상 사용해야 한다.
- 메서드가 변수를 많이 사용할수록 클래스의 응집도는 높다.
- 응집도를 유지하면 작은 클래스가 여러 개 나온다.
- 몇몇 메서드만이 인스턴스 변수를 많이 사용하는 경우가 발생한다면, 클래스를 쪼개야 하는 신호이다!
1-3. 변경하기 쉬운 클래스 (OCP: Open Closed Principle)
- 확장에 개방적이고, 수정에 폐쇄적이어야 한다.
- 새 기능을 추가하거나, 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다.
- 이상적으로, 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지 않는다.
1-4. 변경으로부터 거리 (DIP: Dependency Inversion Principle)
- 클래스는 상세한 구현 클래스가 아니라 추상화된 클래스에 의존해야 한다.
- 각 시스템 요소가 다른 요소 및 변경으로부터 잘 격리되도록 결합도를 낮추어야 한다.
public interface StockExchange {
Money currentPrice(String symbol);
}
// 아래 Portfolio 클래스는 외부 Tokyo의 StockExchange API (TokyoStockExchange)를 사용해
// 포트폴리오 값을 계산한다.
// 만약, API 가 다른 나라의 StockExchange API로 여러 번 바뀐다면 테스트 코드를 짜기가 쉽지 않다.
// 따라서 아래와 같이 StockExchange 인터페이스를 참조자로 인수로 받도록 한다.
public Portfolio {
private StockExchange exchange;
public Portfolio(StockExchange exchange) {
this.exchange = exchange;
}
...
}
- TokyoStockExchange라는 상세한 구현 클래스가 아니라 StockExchange 인터페이스에 의존함으로써, 결합도를 줄일 수 있고, 테스트 코드를 작성하기도 쉬워진다.
728x90
반응형
'클린한 코드 > Clean Code' 카테고리의 다른 글
[클린 코드] 9장. 단위 테스트 (0) | 2024.03.14 |
---|---|
[클린 코드] 7장. 오류처리 (0) | 2024.03.13 |
[클린 코드] 5장. 형식 맞추기 (0) | 2024.03.09 |
[클린 코드] 3장. 함수 (0) | 2024.03.07 |