SOILD 원칙

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

  • ‘하나의 객체가 하나의 책임만 져야 한다.’
  • 클래스를 단 한 가지 목표만 가지고 작성해야 한다.
  • 애플리케이션 모듈 전반에서 높은 유지보수성과 가시성 제어 기능을 유지하는 원칙입니다.

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

  • ‘소프트웨어 컴포넌트는 확장에 관해 열려 있어야 하고 수정에 관해서는 닫혀 있어야 한다.’
  • 다른 개발자가 작업을 수행하기 위해 반드시 수정해야 하는 제약 사항을 클래스에 포함해서는 안 된다는 사실을 의미.
    다른 개발자가 클래스를 확장하기만 하면 원하는 작업을 할 수 있도록 해야 한다.
  • 다양하고 직관적이며 유해하지 않은 방식으로 소프트웨어 확장성을 유지하는 원칙입니다.
    Shape 객체 리스트의 넓이를 구할 경우, 각 도형의 넓이를 구하는 경우를 if문으로 분기처리 하기 보다는 클래스 내부에 넓이에 대한 method를 구현하여 객체별로 .area()와 같이 접근하여 공통으로 처리할 수 있게하면 확장에는 열려있고, 수정 하더라도 다른 클래스에는 영향이 없도록 할 수 있다.

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

  • ‘파생 타입은 반드시 기본 타입을 완벽하게 대체할 수 있어야 한다.’
  • ‘서브클래스의 객체는 슈퍼클래스의 객체와 반드시 같은 방식으로 동작해야 한다.’
  • 타입 변환 후에 뒤따라오는 런타임 타입 식별에 유용한 원칙입니다.

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

  • ‘클라이언트가 사용하지 않을 불필요한 메서드를 강제로 구현하게 해서는 안 된다.’
  • 클라이언트가 사용하지 않을 메서드를 강제로 구현하는 일이 없을 때까지 하나의 인터페이스를 2개 이상의 인터페이스로 분할하는 원칙입니다.

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

  • ‘구체화가 아닌 추상화에 의존해야 한다.’
  • 다른 구상 모듈에 의존하는 구상 모듈 대신, 구상 모듈을 결합하기 위한 추상 계층을 사용한다.
  • 구상 모듈을 분리해야한다는 원칙입니다.