728x90
반응형
10장. 클래스
클래스 체계
- 변수 목록이 가장 먼저 나온다
- 우선순위 정리
- (static, public 상수) → ( private 변수 ) → ( 비공개 인스턴스 )
- 공개함수
- 비공개 함수는 공개 함수 직후에 넣는다
- 추상화 단계가 순차적으로 내려간다. 그래서 프로그램은
신문
기사 처럼 읽힌다.
캡슐화
- 변수와 유틸리티 함수는 최대한 공개하지 않는게 좋다. 하지만 반드시 숨겨야 할 이유도 없다
- 만약 같은 패키지 안에서 TC가 함수를 호출하거나, 변수를 사용해야 한다면, protected로 선언하거나, 패키지 전체로 공개한다
캡슐화를 풀어주는 결정은 언제나 최후의 수단이다
클래스는 작아야 한다
- 클래스를 만들때 가장 중요한것은
크기
이다. 작은것이 가장 중요하다! - 함수는
물리적인 행의 수
- 클래스는
맡은 책임
의 수가 최대한 적어야 한다- 클래스의 이름을 간결하게 기술할 수 있어야 한다.
- 이게 힘들다면, 슈퍼 클래스처럼 맡은 책임이 많을 확률이 높다.
단일 책임 원칙(SRP)
- 재사용성 증가
- 클래스나 모듈을 변경할 이유가 하나,
단 하나뿐
이어야 한다는 원칙이다. 책임
이라는 개념을 정의하며 적절한 클래스 크기를 제시한다.
public class SuperDashboard extends JFrame implements MetaDataUser {
public Component getLastFocusedComponent()
public void setLastFocused(Component lastFocused)
public int getMajorVersionNumber()
public int getMinorVersionNumber()
public int getBuildNumber()
}
책임이 매우 많다. 버전 번호도 바뀌고, 포커스가 닿은 컴포넌트에 접근하는 방법도 제공한다.
public class Version {
public int getMajorVersionNumber()
public int getMinorVersionNumber()
public int getBuildNumber()
}
Version이라는 독자적인 클래스를 생성해서, 단일책임을 만든다.
- 큰 클래스 몇개가 아니라, 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다.
응집도 (Cohesion)
클래스는 인스턴스 변수의 수가 작아야 한다.
각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.
모든 인스턴스 변수를 메서드마다 사용하는 클래스는 응집도가 가장 높다.
public class Stack { private int topOfStack = 0; List<Integer> elements = new LinkedList<Integer>(); public int size() { return topOfStack; } public void push(int element) { topOfStack++; elements.add(element); } public int pop() throws PoppedWhenEmpty { if (topOfStack == 0) throw new PoppedWhenEmpty(); int element = elements.get(--topOfStack); elements.remove(topOfStack); return element; } } // 응집도가 높은 클래스의 예 size를 제외하고 두 메서드는 두 변수를 모두 사용한다.
함수를 작게, 매개변수 목록을 짧게
를 따르다보면, 몇몇 메서드만이 사용하는 인스턴스 변수가 많아지게 된다.- 새로운 클래스로 쪼개야 한다는 신호이다.
- 응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스 두세 개로 쪼개준다.
응집도를 유지하면 작은 클래스 여럿이 나온다.
- 큰 함수를 작은 함수 여럿으로 나누기만 해도 클래스 수가 많아진다.
- 응집도를 높이려면, 메서드들이 인스턴스 변수를 최대한 고르게 사용하도록 분리하자.
결합도 (Coupling)
- 결합도는 낮추는것이 좋다
- 결합도가 낮다는건, 유연성과 재사용성이 더욱 높아진다.
- 다른 시스템과의 격리수준을 말한다
- 결합도를 최소로 줄이면, 또 다른 클래스 설계 원칙인 DIP(Dependecy iversion principle)을 따르는 클래스가 나온다. DIP는 클래스가 상세한 구현이 아니라 추상화에 의존해야한다는 뜻이다.
728x90
반응형
'WEB > Clean Code' 카테고리의 다른 글
[Clean Code] 12장. 창발성 (0) | 2022.02.24 |
---|---|
[Clean Code] 11장. 시스템 (0) | 2022.02.24 |
[Clean Code] 9장. 단위테스트 (0) | 2022.02.23 |
[Clean Code] 8장. 경계 (0) | 2022.02.22 |
[Clean Code] 7장. 오류처리 (0) | 2022.02.21 |