📗 BOOK/스프링 입문을 위한 자바 객체 지향의 원리와 이해

05 객체 지향 설계 원칙 - SOLID

미미누 2022. 4. 8. 19:51

SOLID 원칙

SRP: 단일 책임 원칙

OCP: 개방 폐쇄 원칙

LSP: 리스코프 치환 원칙

ISP: 인터페이스 분리 원칙

DIP: 의존 역전 원칙

 


SRP - 단일 책임 원칙

하나의 클래스에 다수의 역할과 책임이 몰려 있는 것 보다, 클래스를 역할과 책임에 따라 분리해서 각각 하나의 역할과 책임만 갖게 하는 것.

단일 책임 원칙과 가장 관계가 깊은 것은 모델링 과정을 담당하는 추상화를 통해 클래스를 선별하고 속성과 메서드를 설계할 때 단일 책임 원칙을 고려해야 함.

 

OCP - 개방 폐쇄 원칙

자신의 확장에는 열려 있고, 주변의 변화에는 닫혀 있어야 함.

상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신의 확장에는 개방하고, 주변 변화는 폐쇄되어야 함.

 

LSP - 리스코프 치환 원칙

하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다.

리스코프 치환 원칙 적용은 분류를 이용해야 함.

 

ISP - 인터페이스 분리 원칙

단일 책임 원칙과 비슷함. 인터페이스로 분리하되 그 역할에 충실한 최소한의 기능만 공개하라.

 

DIP - 의존 역전 원칙

자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것

상위 클래스일수록, 인터페이스일수록, 추상 클래스일수록 변하지 않을 가능성이 높기에, 하위 클래스나 구체 클래스가 아닌 상위 클래스, 인터페이스, 추상 클래스를 통해 의존해야 된다.

 

SoC(Separation Of Concerns) 관심사의 분리 : 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모으고, 관심이 다른 것은 가능한 한 따로 떨어져 서로 영향을 주지 않도록 분리해야 함.

SoC를 적용하면 자연스럽게 SOLID를 극한으로 이용 가능

 

[정리]

SRP(단일 책임 원칙): 어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다.

OCP(개방 폐쇄 원칙): 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

LSP(리스코프 치환 원칙): 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.

ISP(인터페이스 분리 원칙): 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.

DIP(의존 역전 원칙): 자신보다 변하기 쉬운 것에 의존하지 마라.