공부하기

SOLID 원칙(객체지향 디자인의 5원칙)

Nin 2021. 1. 14. 01:21

좋은 객체지향 설계를 위해서는 다음의 5가지 원칙을 따르는 것이 좋다.

이 객체지향 5가지의 원칙의 앞글자를 따서 SOLID 라고 한다.

S - SRP(Single responsibility principle) 단일 책임 원칙

- 모든 클래스는 단 하나의 책임을 가진다.즉, 클래스를 수정할 이유가 오직 하나여야만 한다는 뜻.

Ex) 계산기 클래스가 있을때, 계산을 하는 책임과 GUI를 나타내는 책임은 서로 분리되어야 한다.


O - OCP(Open Closed Principle) 개방 - 폐쇄 원칙

- 확장에 대해서는 개방 되어 있어야 하지만 수정에 대해서는 폐쇄 되어야 한다.

Ex)캐릭터를 하나 생성한다고 가정할때 각각의 캐릭터가 움직임이 다를 경우

움직임의 패턴 구현을 하위 클래스에 맡긴다면 

캐릭터 클래스의 수정은 필요가 없고(수정에 대해 폐쇄)

움직임의 패턴만 재정의 하면 된다.(확장에 대해 개방)


L - LSP(Liskov Substitusion Principle) 리스코프 치환 법칙

- 1998년 Barbara Liskov (MIT 컴퓨터 사이언스 교수, 2008 튜링상 수상) 가 제안한 원칙으로
  타입 S의 객체 o1 과 타입 T의 인스턴스 o2가 있을 때,

  어떤 프로그램에서 타입 T의 객체로 P가 사용된다고 하면

  S가 T의 서브타입이라면 P에 대입된 o1이 o2로 치환 된다고 해도 P의 행위는 바뀌지 않는다. 

- 즉, 자식 클래스는 언제나 자신의 부모클래스를 교체할 수 있다는 원칙.

  부모클래스가 들어갈 자리에 자식클래스를 넣어도 계획대로 잘 작동해야 한다는 것.

  (업캐스팅을 해도 아무런 문제가 없다.)


I - ISP(Interface Segregation Principle) 인터페이스 분리 원칙

- 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙.

- 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 

  하나의 일반적인 인터페이스 보다는 여러 개의 구체적인 인터페이스가 낫다.

- 자신이 사용하지 않는 기능(인터페이스)에는 영향을 받지 않는다.


D - DIP(Dependency Inversion Principle) 의존성 역전 법칙

- 상위 클래스는 하위 클래스에 의존해서는 안된다는 원칙.

  (하위 클래스가 없어도 상위 클래스의 실행에는 문제가 없어야한다.)

  즉, 하위 클래스가 상위 클래스에 의존을 해야한다.