[Architecture] SOLID 설계 원칙

naneun·2022년 1월 15일
0

Architecture

목록 보기
1/1
post-thumbnail
  - SRP: Single Responsibility Principle
  - OCP: Open-Closed Principle
  - LSP: iskov Substitution Principle
  - ISP: Interface Segregation Principle
  - DIP: Dependency Inversion Principle

SRP (단일 책임 원칙)

  • 소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다.

    • 서로 다른 액터가 의존하는 코드를 분리해야한다.

      • 데이터와 메서드를 분리하는 방식으로 해결할 수 있다.

OCP (개방-폐쇄 원칙)

  • 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안된다.

    • 시스템을 확장하기 쉬운 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록해야한다.

    • 기존 코드를 수정하기보다는 반드시 새로운 코드를 추가하는 방식으로 시스템의 행위를 변경할 수 있도록 설계해야한다.

    • 컴포넌트 단위로 분리하고, 저수준 컴포넌트로부터 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있는 형태의 의존성 계층구조가 만들어지도록 해야한다.

LSP 리스코프 치환 원칙

  • 하위 타입에 관한 유명한 원칙

    하위 타입(subtype) - S 타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T 타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다.

    • 상호 대체 가능한 구성요소를 이용해 소프트웨어 시스템을 만들 수 있으려면, 이들 구성요소는 반드시 서로 치환 가능해야 한다는 계약을 반드시 지켜야한다.

ISP 인터페이스 분리 원칙

  • 소프트웨어 설계자는 사용하지 않는 것에 의존하지 않아야한다.

    • 필요 이상으로 많은 걸 포함하는 모듈에 의존하지 말아야한다.

DIP (의존성 역전 원칙)

  • 소스 코드 의존성이 변동성이 낮은 추상적인 요소에 의존하며 변동성이 큰 구체적인 요소에는 의존하지 않는 시스템이어야한다.

    • 인터페이스를 변경하지 않고도 구현체에 기능을 추가해야한다.

      • 변동성이 큰 구체 클래스를 참조하지 말라.

      • 변동성이 큰 구체 클래스로부터 파생하지 말라.

      • 구체 함수를 오버라이드 하지 말라.

      • 구체적이며 변동성이 크다면 절대로 그 이름을 언급하지 말라.

profile
riako

0개의 댓글