관리 메뉴

김종권의 iOS 앱 개발 알아가기

[Clean Architecture] 7. 설계원칙 (SOLID) 본문

Clean Architecture/Clean Architecture 기초

[Clean Architecture] 7. 설계원칙 (SOLID)

jake-kim 2021. 6. 17. 01:21

Architecture vs SOLID

  • Architecture는 빌딩, SOLID는 좋은 벽돌
    • SOLID를 통해서 좋은 아키텍처를 정의
    • SOLID: 함수와 데이터 구조를 클래스로 배치하고, 이 클래스들을 결합하는 방법에 대한 이론

cf) architecture vs design pattern vs SOLID

  • architecture: 프로그램 내에서 큰 구조로 구성되어 다른 구성 요소들을 관리 방법으로 넓은 개념
  • design pattern: 특정 유형의 문제를 해결하는 방법으로 좁은 개념
  • SOLID: design pattern은 특정 문제 유형을 해결하는 개념이고, SOLID는 아키텍처를 위하여 세부 구조를 어떻게 배치하고 결합하는지에 관한 개념

SOLID의 목적

  • 변경에 유연
  • 이해하기 쉬움
  • 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반

주의할점

  • '중간 수준'의 의미
    • 코드 수준보다는 상위를 의미
    • 프로그래머가 원칙을 모듈 수준에서 작업할 때 적용할 수 있는 형태
    • SOLID 원칙은 '중간 수준'을 의미
  • '고수준'
    • SOLID원칙 뿐만이 아닌 더욱 고려된 부분 - SOLID 원칙 개념 후 이어서 설명
  • 잘 만들어진 벽돌(SOLID)로도 빌딩(Architecture)을 망칠 수 있으므로, SOLID원칙과 고수준의 아키텍처 원칙까지 준수해야 좋은 아키텍처를 형성

SOLID

  • SRP(Single Responsibility Principle)
    • 소프트웨어 모듈은 변경의 이유가 하나여야 한다는 원칙
    • -> 소프트웨어 시스템이 가질 수 있는 최적의 구조는, 소프트웨어 모듈들의 관계에 큰 영향을 받는 형태이므로 변경되는 양향을 최소화 하기 위함
  • OCP(Open-Closed Principle)
    • 시스템에 변경은, 기존 코드를 수정하기보다는 새로운 코드를 추가하는 방식으로 진행
    • -> 기존 코드를 변경하는것보다, 추가하는 행위가 더욱 쉽게 변경할수 있기 때문
  • LSP(Liskov Substitution Principle)
    • 대체 가능한 구성요소를 이용해 소프트웨어 시스템을 만들 때, '대체 가능함'에 대한 기준을 정의
    • '대체 가능함' 정도: '치환'을 했을때도 소프트웨어가 문제없이 도작
  • ISP(Interface Segregation Principle)
    • 클라이언트 관점에서 생긴 원칙
    • 자신이 이용하지 않는 기능에는 영향을 받지 않아야 된다는 원칙
  • DIP(Dependency Inversion Principle)
    • protocol과 같은 고수준 정책을 구현하는 코드는, 저수준 코드(protocol 구현부)에 의존해서는 안된다는 원칙

 

(다음 장에서 SRP ~ DIP 개념 계속)

 

* 참고: Clean Architecture

Comments