객체지향 설계 5대 원칙 (SOLID)

2017. 12. 21. 17:31프로그래밍 언어/Spring Framework

객체지향 설계 5대 원칙 (SOLID)


SRP (The Single Responsibility Principle) : 단일 책임 원칙

클래스는 단일 책임을 가지고서 다른 클래스와의 의존성을 최대한 줄이는 목적.

※ 클래스는 1개의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 1개여야 한다.

ex) class MemberFinder { find } (o)

     class MemberService { find , add, delete } (x)


OCP (The Open Closed Principle) : 개방(확장) 폐쇄 원칙

기능을 변경,확장은 가능(개방)하나 그 기능을 사용하는 코드는 수정하지 않는다(폐쇄)

Interface를 통해 기능을 변경하거나 확장하는것은 가능하나, 외부에서 참조하는 코드는 수정하지 않는다.

= 높은 응집도와 낮은 결합도, = 전략 패턴 


LSP (The Liskov Substitution Principle) : 리스코프 치환 원칙

상위 클래스가 사용되는 곳에 자식 클래스로 치환 하더라도 문제가 없어야 한다.

ex) 한식셰프는 요리사다. , 일식셰프는 요리사다. , 셰프는 요리사다.


ISP (The Interface Segregation Principle) : 인터페이스 분리 원칙

인터페이스를 클라이언트에 특화되도록 분리시키는 설계 원칙이다.

즉, 클라이언트 자신이 이용하지 않는 기능에는 영향을 받지 않아야 한다는 의미이다.


DIP (The Dependency Inversion Principle) : 의존관계 역전 원칙

의존관계를 맺을 때 변화하기 어려운 것, 거의 변화가 없는것에 의존하는 법칙.

첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.

둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.

※ 클라이언트/컨텍스트 관계 , Interface