[OOD] 객체 지향 설계중 LSP , ISP JAVA 예제 코드 용-ILE/잡다구리2011. 11. 24. 19:24
suite.tistory.com 2011.11
OOP는 알고있는데 OOD는 이번에 처음 들어봤다!! ^^;
Object-Oriented Design 에 5대 원칙
S.O.L.I.D
1.SRP 2.OCP 3.LSP 4.ISP 5.DIP
그중에 2가지만 study~
1. Liskov Substitution Principle 리스코프 교체 원칙
정의 : 서브타입은 언제나 자신이 기반타입 (base type)으로 교체할 수 있어야 한다
(부모클래스가 사용되는곳에 자식클래스로 치환 해도 무방해야함)
아래 코드를 보면 modify 와 printList 모두 타입을 LinkedList 받았다가 속도나 기타 구현방식에 따라 LinkedList 부모클래스를 상속받은 ArrayList 나 HashSet를 사용할려면 그대로 대체해서 쓸수없고 기반 소스를 다고쳐야함
~~~~~~~~~~~~~~~~~~~~~~~~~~ LinkedList 종속적 ~~~~~~~~~~~~~~~~~~~~~~~~~~
import java.util.LinkedList;
public class ExampleLSP2 {
void modify(LinkedList<String> list) {
list.add("1");
// list.add(…);
//doSomethingWith(list);
list.add("2");
printList(list);
}
void printList(LinkedList<String> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
ExampleLSP2 ex2 = new ExampleLSP2();
ex2.modify(list);
}
}
기반 소스를 안고치고 생성하는 객체만 생성해서 사용할수 있게 만든다면 아래 처럼 코딩을 할수 있다!
* 단 자식 클랙스 고유의 기능을 사용하지 않을경우
~~~~~~~~~ Collection 부모클래스가 사용되는곳에 자식클래스로 치환 해도 무방 ~~~~~~~~~~~~~~~~~
import java.util.*;
public class ExampleLSP3 {
void modify(Collection<String> list) {
list.add("1");
// list.add(…);
//doSomethingWith(list);
list.add("2");
printList(list);
}
void printList(Collection<String> list) {
System.out.println(list.toString());
}
public static void main(String[] args) {
//Collection<String> list = new HashSet<String>();
Collection<String> list = new ArrayList<String>();
ExampleLSP3 ex2 = new ExampleLSP3();
ex2.modify(list);
Collection<String> list2 = new HashSet<String>();
ex2.modify(list2);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Interface Segregation Principle 인터페이스 격리 원칙
정의 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안 된다.
소스를 보면
BadCarOperation.java 에는 전체가 기능이 모여 있고
BasicCarOperation.java 공통적인 기능 인터페이스
GearboxCarOperation.java , ConditioningCarOperation.java 클라이언트 특성에 따른 별도 구현
ex) SM3.java : CartType2 클래스를 사용해 에어콘 조정 기능이 있지만
ex) BMW.java : CartType1 클래스를 사용해 에어콘 조정 기능이 없다
OOD 5대원칙 SRP , OCP , ISP , LSP , DIP 수많은 글 읽다 보면 그게 그거 같고 어렵다! ㅋ
근데 이거 모른다고 개발못하는건 아니다!
이미 우리가 경험하면서 쓰고 있는것들 같다~ MVC , IoC, JDBC , 공통적인 기능은 한클래스에 모아 쓰기등 ....
'용-ILE > 잡다구리' 카테고리의 다른 글
[ QMAIL ] 메일 첨부파일 바이러스 악성 코드 탐지 simscan #2 (0) | 2012.03.30 |
---|---|
[ QMAIL ] 메일 첨부파일 바이러스 악성 코드 탐지 simscan #1 (0) | 2012.03.26 |
ascii vi 대응표 (0) | 2010.01.27 |
[ Domino / Notes ] Begin MIME to CD Conversion - Domino log 안보이게 하는거 (0) | 2010.01.12 |
[ Notes ] API 계층 설명 잘되어있는 그림 DIIOP , C API C++ , NRPC (0) | 2010.01.04 |