Skip to content
On this page

SOLID 원칙

SOLID

개요

로버트 마틴이 2000년대 초반 명명한 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙을 마이클 페더스가 두문자 기억술로 소개한 것.

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

한 클래스는 하나의 책임만 가져야 한다.
클래스는 그 책임을 완전히 캡슐화 해야하며, 클래스가 제공하는 모든 기능은 이 책임과 주의깊게 부합해야 함.

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

확장에는 열려있으나 변경에는 닫혀 있어야 한다.
모듈의 동작을 확장할 수 있어야하나 소스코드나 바이너리를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다.

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

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
치환성 (Substitution)은 자료형 S가 자료형 T의 하위형이라면, 필요한 프로그램의 속성의 변경 없이 자료형 T를 자료형 S의 객체로 치환할 수 있어야 한다.

인터페이스 분리 원칙 (Interface SEgregation Principle, ISP)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
클라이언트는 자신이 이용하지 않는 메소드에 의존하지 않아야 한다는 원칙. 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시켜 꼭 필요한 메소드들만 이용할 수 있게 해야한다.

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

프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.
상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존 관계를 역전시켜, 상위 계층이 하위 계층의 구현으로부터 독립될 수 있게 함.

  1. 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
  2. 추상화는 세부 사항에 의존해서는 안된다. 세부 사항이 추상화에 의존해야 한다.