나의 언어로 정리하는 클린 설계 원칙 (SOLID)

주싱·2021년 12월 27일
0

Clean Software

목록 보기
3/4

로커트 C. 마틴의 클린 아키텍처를 읽고 정리합니다.

개요

  • 좋은 벽돌로 좋은 아키텍처를 정의하는 원칙이 바로 SOLID이다.
  • SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이들 클래스를 서로 결합하는 방법을 설명해 준다.

목적

SOLID 원칙의 목적은 중간 수준의 소프트웨어 구조가 다음과 같도록 만드는데 있다.

  1. 변경에 유연하다.
  2. 이해하기 쉽다.
  3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다.

1. SRP : 단일 책임 원칙

(Single Responsibility Principle)

  • 하나의 모듈은 오직 하나의 액터에 대한 책임을 지도록 한다.
  • 모듈이 오직 하나의 액터를 책임질 때 응집성(Cohesion)을 가진다고 말한다.
  • SRP는 하나의 모듈이 하나의 일만 해야한다는 뜻이 아니다. (그건 조금더 저수준의 함수에 적용되는 다른 원칙이다)

2. OCP : 개방-폐쇄 원칙

(Open-Closed Principle)

  • 변경은 쉽고(Open), 변경에 의해 영향은 최소화(Closed)하자!
  • 결국 사람이 최소한의 노력을 들여, 최소한의 코드 영역에서 수정할 수 있도록 하자!

실천하기

  • 서로 다른 목적으로 변경되는 요소를 적절하게 분리한다 (단일 책임 원칙)
  • 요소 사이에 의존성의 방향을 제어하여, 중심적인 요소가 부수적인 요소에 의존하지 않도록 한다. 부수적인 요소가 인터페이스에 의존하도록 한다. (의존성 역전 원칙)
  • 어떤 기능을 제공하는 객체 전체를 참조하는 대신, 필요한 인터페이스만 Open 하여 나머지 불필요한 정보들이 Closed 되도록 한다.
  • 그래서 추이 종속성(A가 B에 의존하고, B가 C에 의존하면 A역시 C에 종속하는 성질)을 제거한다.

3. LSP : 리스코프 치환 원칙

(Liskov Substitution Principle)

  • 세부 행위는 다르지만 그 목적이 동일한 서비스를 일관된 형식으로 요청할 수 있어야 한다.
  • 그래서 서비스를 바꾸어도 사용자의 코드(행위)는 변하지 않아야 한다.

LSP를 위반하면

  • 사용자의 모든 요청 코드에 서비스에 따른 if 문이 주렁주렁 생긴다.
  • 그래서 사용하기도, 확장하기도 어려워진다.

4. ISP : 인터페이스 분리 원칙

(Interface Segregation Principle)

  • 사용하지 않는 메쏘드가 있는 클래스에 의존하지 말라.
  • 필요하지 않은 것에 의존하지 말라.

5. DIP : 의존성 역전 원칙

(Dependancy Inversion Principle)

  • 중심적 요소는 여러 부수적 요소를 의존하는데 만약 중심적 요소가 부수적 요소에 의존하게 되면 하나의 부수적 요소의 변경이 중심적 요소의 변경을 초래할 수 있고 이로 인해 다른 모든 부수적 요소 관련 코드도 영향을 받게 됨
profile
소프트웨어 엔지니어, 일상

0개의 댓글