Skip to content

Latest commit

 

History

History
52 lines (31 loc) · 2.74 KB

SOLID.md

File metadata and controls

52 lines (31 loc) · 2.74 KB

SOLID 원칙

SOLID 원칙 = 객체지향 5대원칙
  • SOLID원칙이란, SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)을 말하며, 앞자를 따서 SOLID원칙이라고 부른다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 소프트웨어를 만드는데 이원칙들을 적용할 수 있다.

1. Single Responsiblity Principle (단일 책임 원칙)

  • 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임(기능)만을 가져야 한다.

2. Open-Closed Principle (개방-패쇄 원칙)

  • 기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록 (Open) 설계해야 한다.

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

  • 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.
이해를 돕기위해 도형을 예시를 들어보자. 도형 클래스와 사각형 클래스가 있고, 사각형 클래스는 도형 클래스의 상속을 받는다고 가정하자.

(1) 도형은 둘레를 가지고 있다.

(2) 도형은 넓이를 가지고 있다.

(3) 도형은 각을 가지고 있다.

일반화 관계(일관성인지 확인하는 방법은 단어를 교체해 보면 알 수 있다.  (1) ~ (3)의 도형이란 단어 대신 사각형을 넣어보자.

(1) 사각형은 둘레를 가지고 있다.

(2) 사각형은 넓이를 가지고 있다.

(3) 사각형은 각을 가지고 있다.

(1) ~ (3) 모두 딱히 이상한 부분이 보이지 않는다. 따라서 도형과 사각형 사이에는 일관성이 있다고 할 수 있다.

여기서 원(Circle) 이라는 도형에 대해 생각해보자. 원 클래스 역시 도형 클래스의 상속을 받는다고 가정하자. 앞에서 언급한 (1) ~ (3)의 도형 단어 대신 원을 대입해보자.

(1) 원은 둘레를 가지고 있다.

(2) 원은 넓이를 가지고 있다.

(3) 원은 각을 가지고 있다.

문장을 읽어보면 (3)번 문장이 어색하다는 것을 알 수 있다. 따라서 도형 클래스는 LSP을 만족하지 않은 설계라 할 수 있다. 따라서 (3)문장에 대해서는 일반화 관계가 성립하도록 수정되어야 한다.

4. Dependency Inversion Principle (의존 역전 원칙)

  • 의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다는 원칙이다.

5. Interface Segregation Principle (인터페이스 분리 원칙)

  • 한 클래스는 자신이 사용하지 않는 인페이이스는 구현하지 말하야 한다. 하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다.