Clean Architecture 3부: 설계 원칙

jiffydev·2021년 4월 24일
0

Clean Architecture

목록 보기
2/5
post-custom-banner

로버트 C. 마틴의 클린 아키텍처를 읽고 내용 요약 및 생각 정리용 포스트

요약

  • 단일 책임 원칙(SRP)
    단순히 하나의 함수는 하나의 기능만을 해야 한다는 뜻이 아니다.(너무 작은 범위)
    단일 모듈은 단 하나의 액터(=이해관계자 집단)만을 책임져야 한다.
    같은 액터를 책임지는 모듈끼리는 모으고(cohesion), 다른 책임을 지는 모듈과는 분리(decouple)시키는 것과 일맥상통.
    관심사의 분리(separation of concerns)와도 관계가 있음

  • 개방-폐쇄 원칙(OCP)
    소프트웨어 개체는 확장에는 열려 있고, 변경에는 닫혀 있다.
    이는 클래스나 모듈 설계에만 국한되지 않고 아키텍처 컴포넌트 수준에서도 중요.
    열려 있다면 소스코드의 수정 없이 데이터 구조에 필드를 추가하거나 함수에 원소를 추가할 수 있음.
    닫혀 있다면 다른 클래스에서 이를 구현/상속할 수 있고, 이 때 구현/상속 당하는 클래스는 이에 대해 알지 못한다.
    저수준의 컴포넌트(예: View)가 고수준의 컴포넌트(예: Ineteractor)를 의존함으로써 고수준 컴포넌트를 저수준 컴포넌트의 변경으로부터 보호.

  • 리스코프 치환 원칙(LSP)
    상위 타입의 객체는 이를 상속한 하위 타입 객체와 행위의 변화 없이 호환될 수 있어야 한다.
    상위 클래스의 메소드를 오버라이드 한 하위 클래스의 메소드는 상위 클래스 메소드의 제약조건을 따라야 하고, 하위 클래스에서 더 엄격한 유효성 검사 규칙을 적용해서는 안된다.
    클래스 상속과 관련된 원칙에 국한되지 않고 인터페이스와 구현체에도 적용.

  • 인터페이스 분리 원칙(ISP)
    사용하지 않는 메소드에 종속되어서는 안된다.
    Job 클래스와 client 사이에 인터페이스를 추가하고 각 기능별 인터페이스는 job 클래스에서 상속받은 메소드를 호출한다. (DIP와도 연관)
    아키텍처 관점에서 보면 시스템이 불필요한 기능에 의존하게 되면 그 불필요한 기능의 변화로 인해 시스템을 변경해야 하는 상황이 발생할 수 있다.

  • 의존성 역전 원칙(DIP)
    모듈이 추상에 의존하고 구체에 의존하지 않는것.
    여기서 구체는 변동성이 큰 구체.
    제어흐름은 추상에서 구체로 이동하지만 소스 코드 의존성은 반대이다. 이것이 의존성 역전.
    low-level이 직접적으로 high-level에 직접적으로 의존해야 하는 것은 아니고, 인터페이스가 상위 계층을 상속받아 하위 계층은 인터페이스를 구현하는 식으로 의존성을 역전시킬 수 있다.

으악 포인트

질문

소감

추가 사항

profile
잘 & 열심히 살고싶은 개발자
post-custom-banner

0개의 댓글