1. 결합도
클래스간의 상호 연결성을 측정하는 것
낮은 결합도를 가지려면 하나의 객체의 변경이 다른 객체에 영향을 미쳐서는 안된다.
- tightly coupling(강한 결합)
1) 하나의 클래스가 다른 클래스를 사용할 때 클래스의 이름을 직접 사용하는 것
2) 교체가 불가능하고 경직된 디자인이 된다.
- loosely coupling(약한 결합)
1) 하나의 클래스가 다른 클래스를 사용할 때 규칙에 해당하는 부모 클래스 이름(인터페이스, 추상클래스) 를 사용하는 것
2) 교체가 가능한 유연한 디자인이 된다.
2. 응집도
하나의 클래스가 하나의 기능을 온전히 순도 높게 담당하고 있는 정도
하나의 클래스가 하나의 책임만 담당
3. 단일 책임의 원칙 ( SRP: The Single Responsibility Principle )
- 클래스에는 한 가지 종류의 책임만 두어야 한다.
File 클래스 - 파일처리 책임
String 클래스 - 문자열 표현 처리 책임
- 높은 응집도와 낮은 결합도 원칙을 지킬수 있는 세부 원칙이다.
- 클래스가 하나 이상의 책임을 맡게 되면 결합도가 커지고 변경이 어려워진다.
4. 개방-폐쇄의 원칙 ( OCP : The Open-Closed Principle )
- '확장'에 대해서는 개방되어야 하지만, '변경'에 대해서는 폐쇄되어야 하는 원칙
- Context 클래스에서 멤버변수로 Interface를 소유하고 있다.
- 새로운 ImplementationThree 클래스를 추가하여 기능을 확장하는 것은
무척 자연스럽다.
( 실행시 Context 멤버변수를 변경하는 일은 Context 생성자를 실행할 때,
실제 필요한 Strategy객체를 생성하여 매개변수로 전달하면 되기 때문이다.)
- 이러한 구조는 '인터페이스의 변경은 닫혀 있으나 인터페이스의 구현은 열려있다'라고 할수 있다.
- 기능을 확장 했을 때, 기존 클래스의 변경을 최소화할 수 있다는 점이다.
5. 인터페이스 분리의 원칙 ( ISP : Interface Segregation Principle )
- '클라이언트는 자신이 사용하지 않는 메소드와 의존 관계를 갖지 않도록 해야한다'
- Service 인터페이스가 변경되면 관련된 ClinetA, ClientB, ClientC 모두 변경해야한다.
- ISP를 적용하여 클라이언트에게 꼭 필요한 메소드만을 제공하도록 변경하면,
IManager의 변경에 따른 변화를 최소화할 수 있다.
6. 리스코프 치환의 원칙 ( LSP : Liskov Substitution Principle )
- 자식 타입들은 부모 타입들이 사용되는 곳에 대체될 수 있어야 한다는 원칙이다.
즉 부모 클래스가 사용되는 곳에 자식 클래스로 치환 하더라도 문제가 없어야 한다는 의미이다.
7. 의존 관계 역전의 원칙 ( DIP : Dependency Inversion Principle )
- 자주 변경되는 클래스에 의존하지 말고 추상 클래스나 인터페이스에 의존해야한다
- 일반적으로 추상 클래스와 인터페이스를 변경하기보다는 Concrete Class를 변경해야 되는 경우가
더 많기 때문에, 콘트리트 클래스에 의존하면 그 클래스에 의존하는 클래스를 수정해야 하는 경우가 더많다.
'Android' 카테고리의 다른 글
안드로이드 현재 화면 모든 텍스트 캡처 (0) | 2014.08.21 |
---|---|
android 화면 추출 (0) | 2014.08.21 |
android packet capture (0) | 2014.08.21 |
안드로이드 어플리케이션 백그라운드에서 수행 (0) | 2014.08.21 |
안드로이드 터치 이벤트 발생시키기 (0) | 2014.08.21 |