객체 지향의 원칙

개발 노트 2009. 1. 23. 15:46 posted by 무병장수권력자


객체 지향의 원칙

작성자 : 김문규
최초 작성일 : 2009. 1.28

1. OCP (Open Close Principle, 개방 폐쇄의 원칙)
 - 변하는 것과 변하지 말아야 하는 것의 구분에 대한 원칙
 - 확장에 대해서는 개방되고 변경에 대해서는 폐쇄되어야 한다.
 - 인터페이스를 활용하여 느슨한(Loosely Coupled) 설계를 한다.
 - 인터페이스 자체는 변하지 말아야 하고 이에 대한 구현을 추가, 변경, 삭제하여야 한다.

2. SRP (Single Reponsibility Principle, 단일 책임의 원칙)
 - 하나의 클래스의 단 하나의 책임만을 가지도록 한다.

3. ISP (Interface Segregation Principle, 인터페이스 분리의 원칙)
 - 최대한 작게 인터페이스를 분리하라.

4. DIP (Dependency Inversion Principle, 상관 관계 역전의 원칙)
 - 인터페이스와 그 구현의 연결을 코드에서 하지말고 프레임워크에서 수행하도록 한다.
 - 기존의 caller 함수가 callee 함수를 호출하는 단순한 관계에서 발전하여 callee에 caller의 hook method를 등록하고 필요한 시점에 caller가 이를 다시 호출하는 것을 말한다.
 - 좋은 사례로는 이벤트 드리븐(event driven), 콜백(call back)이 있다.

5. LSP (Liskov Substitution Principle, 리스코프 대체 원칙)
 - 클래스 간의 하위호환성을 보장하도록 설계/구현해야 한다.
 - 베이스 클래스의 인터페이스를 하위 클래스에서는 충실하게 구현해야 한다.
 - 따라서, 상속 구조에서 모든 서브 타입은 언제나 기반 타입으로 교체 가능해야 한다.

상속(Inheritance) 관계를 설명한 유명한 비유

IS-A

[1] 만약 두 객체가 똑같은 일을 한다면 둘을 한 클래스로 표현하고 이들을 구분할 수 있는 필드를 두면 된다.
[2] 똑같은 연산을 제공하지만, 이들을 약간씩 다르게 한다면 공통의 인터페이스를 만들고 둘이 이를 구현하도록 한다. (인터페이스 상속).
[3] 공통된 연산이 없다면 완전 별개인 2개의 클래스를 만들면 된다.
[4] 만약 두 객체가 하는 일에 추가적으로 무언가를 더한다면 구현 상속을 사용한다.

하지만 항상 옳은 것은 아니므로 그냥 참고만 하도록!


** 참고
마이크로소프트웨어 글 (zdnet 게재)
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039134727
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039135552
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039139151
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039137043
우야꼬의 Adobe RIA
http://wooyaggo.tistory.com/80
http://wooyaggo.tistory.com/81
http://wooyaggo.tistory.com/82