- 클래스 체계
- 표준 자바 관례’s 클래스 정의 : static public 상수 > private 변수 > private 인스턴스 변수
- 추상화가 순차적으로 내려가도록 하여 가독성을 높힌다.
ㄴ 캡슐화 : 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 좋다.
class {
public static final String BASE_URI = "<http://www.somewhere.com>";
private static int count;
private List<String> dataBucket = new ArrayList();
private void addSomething(String data){
dataBucket.add(data);
count++;
}
}
- 클래스는 작아야 한다.
- 클래스가 맡은 책임의 갯수로 크기를 줄인다.
- 단일 책임 원칙(SRP) : 하나의 클래스는 하나의 책임만을 가져야 한다.
- 클래스를 통해 누구나 단번에 책임을 알아차릴 수 있도록 줄여라.
- 응집도
- 클래스는 인스턴스 변수 수가 작아야 한다.
- 응집도가 높은 경우 : 모든 인스턴스 변수를 메소드 마다 사용하는 경우
- 응집도를 유지하면 작은 클래스 여럿이 나온다.
- 변경하기 쉬운 클래스
- 대다수의 프로그램은 수차례의 변동 작업이 이루어지기 마련이다.
- 변경할 때마다 코드에 손을 내면 다른 코드도 망가트릴 가능성이 높다.
- 설계를 어떻게 개선할 것인가 - 고민과 시도가 필요해진다.
- OCP 원칙 : 확장에 개방적이고 변동에 폐쇄적이어야 한다.
- 변경으로부터 격리
- 클래스의 구분
- 구체적인 클래스 (Concrete Class) : 상세 구현(코드) 포함
- 추상적인 클래스 (Abstract Class) : 개념만 포함
- 인터페이스와 추상 클래스를 통해 구현이 미치는 영향을 격리한다.
- 결합도가 낮춘다 → 유연성과 재사용성이 높아진다.
- 결합도를 낯준다 = 각 시스템 요소가 다른 요소로부터, 그리고 변경으로부터 잘 격리되어 있다.