목차

SOLID 란?

In object-oriented computer programming, SOLID is a mnemonic acronym 
for five design principles intended to make software designs more 
understandable, flexible, and maintainable. The principles are a 
subset of many principles promoted by American software engineer 
and instructor Robert C. Martin, first introduced in his 2000 
paper Design Principles and Design Patterns. - Wikipedia

SOLID 란, 5개의 디자인 원칙의 앞글자를 따서 만든 축약어이다. 이 다자인 원칙들은 소프트웨어 디자인을 보다 이해하기 쉽고, 유연하게 만들며 관리하기 쉽게 하는 것이 목적이다. 로버트 마틴에 의해 처음 소개되었다.

5개의 디자인 원칙은 아래와 같다.

  • SRP, Single-responsibility principle: 단일 책임 원칙
  • OCP, Open–closed principle: 개방-폐쇄 원칙
  • LSP, Liskov substitution principle: 리스코프 치환 원칙
  • ISP, Interface segregation principle: 인터페이스 분리 원칙
  • DIP, Dependency inversion principle: 의존관계 역전 원칙

1. Single-responsibility principle

단일 책임 원칙

  • 모든 클래스는 오직 하나의 책임(responsibility)만을 가져야 한다.
  • 여기서 책임이란, 바뀌어야하는 이유를 말한다.
  • 예를 들어,
    • 어떤 문서를 컴파일하고 출력하는 모듈이 있다고 가정하자.
    • 그리고, 이 모듈이 변경되어야 할 이유 두 가지를 생각해보자; 문서의 내용이 변경되었을 때, 그리고 문서의 양식이 변경되었을 때
    • 이 경우, 단일 책임 원칙에 따르면, 이 두 이유는 두 개의 책임이며, 이들은 각각 별도의 클래스나 모듈로 분리되어야 한다.

2. Open–closed principle

개방-폐쇄 원칙

  • 소프트웨어 요소는 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다.
  • 다시 말해, 클래스, 모듈, 함수와 같은 소프트웨어 요소는 자신의 코드를 변경하지 않으면서 자신의 행동을 확장할 수 있어야 한다.

3. Liskov substitution principle

리스코프 치환 원칙

  • S가 T의 하위타입이라면, T 타입의 객체들은 정확성과 같은 프로그램의 속성을 변경하지 않고, S 타입의 객체로 대체될 수 있어야 한다.
  • 이 원칙에 따르면, Java의 Interface를 이용한 다형성에서, 인터페이스를 구현하는 클래스는 인터페이스가 설계된 방식대로 작동해야한다. (이름만 같고 다른 방식으로 작동하면 안 된다.)

4. Interface segregation principle

인터페이스 분리 원칙

  • (어떠한 클라이언트도 자신이 사용하지 않는 메서드들에 의존해서는 안 된다. 따라서,)
  • 하나의 범용(general-purpose) 인터페이스보다, 특정 클라이언트를 위해 만들어진 인터페이스 여러 개가 더 좋다.

5. Dependency inversion principle

의존관계 역전 원칙

  • 소프트웨어를 디자인할 때, 구체화가 아니라 추상화에 의존해야 한다.
  • 이 원칙에 따르면, Java의 Interface를 사용할 때, 클라이언트가 인터페이스를 구현한 클래스가 아니라, 인터페이스에 의존하도록 코드를 작성하는 것이 더 바람직하다.

참고자료

  • 스프링 핵심 원리 기본편, 김영한, inflearn
  • Wikipedia