객체지향 설계의 5원칙: OCP, SRP, LSP, DIP, ISP

Posted by epicdev Archive : 2012. 7. 29. 20:27

1) OCP (Open Closed Principle)

소프트웨어의 구성요소(클래스, 모듈, 함수 등) 들은 확장에 대해서는 열려있어야 하지만, 변경에 대해서는 닫혀있어야 한다.


2) SRP (Single Responsibility Principle)

모든 클래스는 하나의 책임만을 지녀야 한다.

이는 또한, 객체를 변경해야 하는 이유는 단 하나여야 한다는 것과도 상통한다.

예를 들어 클래스 A는 출력에 대한 책임만 가지고 있고, 클래스 B는 입력과 출력에 대한 책임을 모두 가지고 있다고 했을 때

SRP를 지키고 있는 클래스 A가 그렇지 않은 B보다 상대적으로 복잡도가 낮을것이며, 또한 코드가 수정 될 가능성도 적을 것이다.


3) LSP (Liskov Substitution Principle)

Parent형의 변수에 Child 클래스의 인스턴스를 대입해도 문제없이 사용할 수 있어야 한다.

http://epicdevs.com/119


4) DIP (Dependency Inversion Principle)

상위 레벨 모듈은 하위 레벨 모듈에 의존하지 않아야 한다. 상위 레벨, 하위 레벨 모두 추상에 의존하여야 한다.

추상은 구상에 의존하지 않아야 한다. 구상 또한 추상에 의존하여야 한다.

http://epicdevs.com/117


5) ISP (Interface Segregation Principle)

클라이언트가 사용하지 않는 인터페이스에 클라이언트가 영향을 받아서는 안된다.

여러개의 클라이언트가 함께 사용하는 매우 큰 인터페이스를 만들지 말고,

좀 더 작고 구체적인 인터페이스를 만들어서, 하나의 인터페이스가 하나의 기능만을 담당하도록 만들어야 한다.

http://extern.tistory.com/14

http://www.oodesign.com/interface-segregation-principle.html