본문 바로가기
배움의공간(學)/기타

[DP] SOLID 원칙

by ㅋㅕㅋㅕㅇㅣ 2022. 12. 22.
좋은 설계란
시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받은 범위가 적은 구조를 말한다.

 

 

SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 원칙(SRP, OCP, LSP, DIP, ISP) 를 말한다.

 

1. SRP (Single Reponsibility Principle, 단일 책임 원칙)

- 객체는 단 하나의 책임만 가져야 한다는 원칙

- 응집도를 높게, 결합도(의존성)를 낮게

 

2. OCP (Open Closed Principle, 개방 폐쇄 원칙)

- 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다는 원칙

- 변경되는 것이 무엇인지에 초점을 맞춘다.

  - 자주 변경될 수 있는 내용은 수정하기 쉽게(Open) 설계해야 하고,

  - 자주 변경되지 않는 내용은 수정에 영향받지 않게(Closed) 설계해야 한다.

- 캡슐화를 통해 여러 객체에서 사용하는 같은 기능을 인터페이스에 정의

Animal 인터페이스를 구현한 각 클래스들은 울음소리 crying() 함수를 재정의 함

 

3. LSP (Liskov Substitution Principle, 리스코프 치환 원칙)

- 부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 한다는 원칙

- 부모 클래스의 인스턴스 대신 자식 클래스의 인스턴스를 사용해도 문제가 없어야 함

  ⇒ 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 함 (overriding: X)

 

4. ISP (Interface Segregation Principle, 인터페이스 분리 원칙)

- 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙 (불필요한 의존성 제거)

- 하나의 거대한 인터페이스 보다는 여러 개의 구체적인 인터페이스가 낫다는 것을 의미

  ⇒ 각 인터페이스 함수를 ConcreteClass 에서 필요에 따라 implement 함 

 

5. DIP (Dependency Inversion Principle, 의존 역전 원칙)

- 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙

- 의존 관계를 맺을 때, 변화하기 쉬운 것 보다 변화하기 어려운 것에 의존해야 함

  . 변화하기 쉬운 것 = 구체적인 것 ⇒ 클래스 인스턴스

  . 변화하기 어려운 것 = 추상적인 것 ⇒ 추상 클래스, 인터페이스

Client 객체는 Cat, Dog, Bird의  crying()  메서드에 직접 접근하지 않고, Animal 인터페이스의  crying()  메서드를 호출함으로써 DIP를 만족할 수 있음

 

- 참고: victolee, devmoony

'배움의공간(學) > 기타' 카테고리의 다른 글

핸드폰으로 밤하늘 별 촬영법  (0) 2023.02.07
Stack overflow survey  (0) 2023.01.02
[DP] GoF (Gang of Four)  (0) 2022.12.22
if(kakao) dev2022 을 보며  (0) 2022.12.08
Link - 개발관련  (0) 2019.06.18

댓글