본문 바로가기
Architecture

[Architecture] SOLID 원칙

by Sky Titan 2021. 5. 29.
728x90
 

클린 아키텍처

살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙『클린 코드』와 『클린 코더』의 저자이자 전설적인 소프트웨어 장인인 로버트 C. 마틴은 이 책 『클린 아키텍처』에서 이러한

www.yes24.com

SOLID 원칙

  • 코드 수준보다 조금 상위에 적용되어 모듈과 컴포넌트 내부에서 사용되는 소프트웨어 구조를 정의하는 데 도움을 준다.
  • SOLID 원칙이 만들어내는 소프트웨어 구조
    1. 변경에 유연한다.
    2. 이해하기 쉽다.
    3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다.

 

1. SRP : 단일 책임 원칙 (Single Responsibility Principle)

  • 각 소프트웨어 모듈은 단 하나의 책임만을 가지고 있어야 하며 따라서 모듈의 변경의 이유는 단 하나여야만 한다.
  • 하나의 모듈은 하나의 액터에 대해서만 책임져야 한다.
  • 메서드, 클래스 수준의 원칙

 

2. OCP : 개방-폐쇄 원칙 (Open-Closed Principle)

  • 소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
  • 기존 코드를 수정하기보다는 새로운 코드를 추가해서 시스템의 행위를 변경할 수 있도록 설계해야만 소프트웨어 시스템을 쉽게 변경할 수 있다.
  • 저수준 컴포넌트의 변경으로부터 고수준 컴포넌트를 보호할 수 있는 형태의 의존성 계층구조가 만들어져야함.

 

3. LSP : 리스코프 치환 원칙 (Liskov Substitution Principle)

  • 상호 대체 가능한 구성요소를 이용하여 소프트웨어 시스템을 만들 수 있으려면, 이들 구성요소는 반드시 서로 치환 가능해야한다.
  • 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 치환할 수 있어야 한다.
    • 자식 클래스는 부모 클래스의 역할을 모두 수행할 수 있어야 한다.
  • 예시) LSP 위반 사례
    • Rectangle(직사각형) <- Square(정사각형)
    • Square는 항상 width, height가 같아야하기 때문에 만약 Rectangle이 Square로 치환되면 사용하던 actor는 제대로 기능을 사용할 수가 없다.

 

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

  • 소프트웨어 설계자는 사용하지 않은 것에 의존하지 않아야 한다.
  • 사용하지 않은 클래스, 인터페이스 등을 상속하지 않아야 한다는 뜻

 

5. DIP : 의존성 역전 원칙 (Dependency Inversion Principle)

  • 고수준 정책을 구현하는 코드는 저수준 세부사항 코드에 절대로 의존해서는 안된다.
  • 반대로 세부사항이 정책에 의존해야한다.
  • 상위 모듈은 하위 모듈에 의존해서는 안된다는 의미
    • 자주 변화하는 구체적인 클래스보다 자주 변하지 않는 인터페이스, 추상 클래스 등에 의존해야한다.
728x90

댓글