Skip to main content Link Menu Expand (external link) Document Search Copy Copied

좋은 객체 지향 설계의 5가지 원칙 SOLID

Table of contents

  1. S : SRP(Single Responsibility Principle), 단일 책임 원칙
  2. O : OCP(Open/Closed Principle), 개방·폐쇄 원칙
  3. L : LSP(Liskov Substitutuion Principle), 리스코프 치환 원칙
  4. I : ISP(Interface Segregation Principle), 인터페이스 분리 원칙
  5. D : DIP(Dependency Inversion Principle), 의존관계 역전 원칙

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


한 클래스는 하나의 책임만 가져야 한다.

중요한 기준은 변경이다. 변경이 발생할때, 파급효과가 적으면 단일 책임 원칙, 즉 SRP 원칙을 잘 따른 것이다.

각 기능을 수행하는 인터페이스를 구현한 클래스와 기능을 실행하는 클래스와 구현한 클래스를 기능을 실행하는 클래스에 넣어주는 연결 클래스로 나누어주는 작업이 이에 해당한다.


O : OCP(Open/Closed Principle), 개방·폐쇄 원칙


확장에는 열려있어야 하나, 변경에는 닫혀있어야 한다.

새로운 기능을 추가하고 싶으면, 수정하는 것이 아닌, 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다.

구현 클래스와 실행클래스를 연결해주는 Config 클래스의 변경만 있으면 변화를 유연하게 할 수 있으며, 구현클래스에서의 직접적인 수정은 필요하지 않다.


L : LSP(Liskov Substitutuion Principle), 리스코프 치환 원칙


프로그램의 객체는, 프로그램의 정확성을 깨뜨리지 않으면서 하위타임 인스턴스로 바꿀 수 있어야 한다.

다형성에서 하위클래스는 인터페이스 규약을 다 지켜야 한다.

ex) 자동차 인터페이스의 엑셀을 앞으로 가능 기능이라고 했으면, 하위 클래스에서 앞으로 가게 구현해야하지, 뒤로 가게 구현하면 LSP 위반


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


클라이언트는 자신이 사용하지 않는 메서드에 의존관계를 맺으면 안되는 원칙이다.

비대한 인터페이스보다 더 작고 구체적인 인터페이스로 분리해야 한다.

즉, 특정 클라이언트를 위한 인터페이스 여러개가, 여러 기능이 합쳐있는 범용 인터페이스 하나보다 낫다.


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


구현 클래스에 의존하지 말고, 인터페이스에 의존해야한다.

그래야 유연하게 구현체 변경이 가능하다.

추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙이다.

구현 클래스에는 구현클래스가 있으면 안된다. 오직 추상화된 인터페이스만 있어야 하며, 이를 연결해주는 Config 클래스를 이용한다.


면접에 잘 나오는 질문이고, 면접 질문 때문이 아니더라도 좋은 객체 지향 설계를 위해서 머릿속에 넣어놔야겠다.