티스토리 뷰

Backend/꾸준히 TIL

[클린아키텍쳐] 설계원칙 SOLID 2

개발하는 후딘 2023. 11. 3. 23:55
728x90
반응형

학습차원으로 "클린아키텍쳐" 도서를 읽고 정리한 글입니다.


SRP: 단일 책임 원칙

 

단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야한다.

하나의 모듈은 하나의, 오직 하나의 액터(actor)에 대해서만 책임져야한다.

 

  • SRP가 말하는 “변경의 이유”란 바로 이들 사용자와 이해관계자를 가리킨다.
  • 소프트웨어 시스템은 사용자와 이해관계자를 만족시키기 위해 변경된다.
  • actor은 사용자/이해관계자 집단을 의미한다.
  • 클래스는 하나의 유효범위가 되며, 유효범위 바깥에서는 private 멤버가 있는지를 전혀 알 수 없다.
  • 단일 책임원칙은 메소드와 클래스 수준의 원칙이다. 

OCP: 개방-폐쇄 원칙

 

  • 소프트웨어 개체(artifact)는 확장에는 열려있어야하고, 변경에는 닫혀있어야한다.
  • 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안된다.
  • 책임을 분리했다면, 이들중 하나에서 변경이 발생하더라도 다른 하나는 변경되지 않도록 소스코드 의존성도 확실히 조직화해야 한다.
  • 새로 조직화한 구조에서는 행위가 확장될때 변경이 발생하지 않음을 보장해야한다.
  • 처리과정을 클래스 단위로 분할하고, 분할된 클래스를 컴포넌트 단위로 구분해야한다.
    • 모든 의존성이 소스코드 의존성을 나타낸다.
      • 화살표가 클래스A → 클래스B 로 향한다면
      • 클래스A에서는 클래스B를 호출하지만, 클래스B에서는 클래스A를 전혀 호출하지 않음을 뜻한다.
    • 모든 컴포넌트 관계는 단방향으로 이루어진다.
      • 컴포넌트A에서 발생한 변경으로부터 컴포넌트B를 보호하려면
      • 반드시 컴포넌트A가 컴포넌트B에 의존해야한다.

 

  • Interactor 는 다른 모든것에서 발생한 변경으로부터 보호하고자 한다.
    • Interactor는 OCP를 가장 잘 준수할 수 있는 곳에 위치한다.
    • Database, Controller, Presenter, View에서 발생한 어떤 변경도 Interactor에 영향을 주지 않는다.
    • Interactor가 업무규칙을 포함하므로, 어떤변경에도 영향을 주지않는다.
    • Interactor은 애플리케이션에서 가장 높은 수준의 정책을 포함하므로 Interactor은 가장 중요한 문제를 담당한다.
    • Interactor 이외의 컴포넌트는 모두 주변적이 문제를 처리한다.

 

 

  • 아키텍트는 기능이 어떻게/왜/언제 발생하는지에 따라서 기능을 분리하고, 분리한 기능을 컴포넌트의 계층구조로 조직화한다.
  • 컴포넌트 계층구조를 이와같이 조직화하면 저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있다.

 

 

  • OCP의 목표는 시스템을 확장하기 쉬운 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록 하는데 있다.
  • 이러한 목표를 달성하려면 시스템을 컴포넌트 단위로 분리하고, 저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있는 형태의존성 계층 구조가 만들어지도록해야한다.

 


LSP: 리스코프 치환법칙

  • 하위타입(subtype)에 대한 정의
여기에서 필요한 것은 다음과 같은 치환(substitution)원칙이다.
S타입의 객체 o1이 각각에 대응하는 T타입 객체 o2가 있고
T타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도
P의 행위가 변하지 않는다면, S는 T의 하위타입이다.

 

 

  • LSP를 준수하는데 Billing 애플리케이션의 행위가 License하위 타입중 무엇을 사용하는지에 전혀 의존하지 않는다. 이들 하위타입은 모두 License 타입을 치환할 수 있다.

 

  • LSP는 인터페이스와 구현체에도 적용되는 광범위한 소프트웨어 설계원칙 이다.
  • LSP는 아키텍처 수준까지 확장할 수 있고, 반드시 확장해야만 한다.
  • 치환가능성을 조금이라도 위배하면 시스템 아키텍쳐가 오염되어 상당향의 별도 메커니즘을 추가해야할 수 있기 때문이다.
728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함