24.02.14 클린 아키텍처

KSang·2024년 2월 17일
0

TIL

목록 보기
60/101

클릭아키텍처는 추상화 개념으로 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처이다.

그 동안 MVVM패턴을 구현하면서 클린아키텍처를 공부했지만 좀 더 명확하게 정리를 해볼까 한다.

MVVM패턴과 클린아키텍처

MVVM 패턴은 클린아키텍쳐를 구현하기위한 설계 과정이라 보면된다.

MVVM 패턴의 목적은 View (UI 로직), ViewModel (프레젠테이션 로직), Model (비즈니스 로직 및 데이터 액세스) 간의 역할을 명확하게 분리하는 것 인데,

여기서 도메인 데이터 레이어를 구별하고 DTO를 사용하거나 레이어간 의존성 제거를 위해 DI등을 사용하며 전체적인 설계를 하는것이 클린아키텍처다

Presentation/Data/Domain로 레이어를 나눌때 Presentation레이어에서 구현하는것이 MVVM 이라 보면 된다.

클린아키텍처

클린아키텍처의 기본적인 원리는 종속성 규칙(Dependency Rule)을 지키는 것이다.

각 코드의 종속성은 외부에서 내부로 안쪽으로만 가리킬 수 있고, 고수준 정책이 저수준 정책의 변경에 영향을 받지 않도록 하는 것

레이어 구조를 보면

여기서 안쪽에 있을수록 고수준 정책이고, 바깥쪽에 있을수록 저수준 정책이다

주요 원칙

  • Dependency rule (종속성 규칙)

    클린 아키텍처의 핵심 원칙, 의존성은 바깥쪽으로 향하도록 내부의 코드는 외부 코드에 의존하면 안 되고, 외부 코드는 내부 코드의 변경에 영향을 받지 않아야한다.

  • Abstraction principle (추상화 원리)

    세부 사항은 추상화에 의존해야 한다
    구체적인 구현은 추상적인 인터페이스에 의존하게 되고, 이로 인해 코드의 유연성과 재사용성이 향상된다.
    RDS, Repository 처럼 데이터 액세스 로직을 추상화 한것

  • SOLID (객체 지향 설계 원칙)

    SOLID 원칙은 객체 지향 설계의 핵심 원칙들이다.
    객체 간의 의존성을 줄이고, 코드의 재사용성과 유지보수성을 높일 수 있다.


    1.SRP (Single Responsibility Principle, 단일 책임 원칙)
    한 클래스는 하나의 책임만 가져야 한다.
    즉, 클래스가 변경되는 이유는 하나여야 한다.
    이 원칙을 준수하면 클래스의 복잡성을 줄이고, 유지 관리를 용이하게 할 수 있다.

    OCP (Open-Closed Principle, 개방-폐쇄 원칙)
    소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.
    기존의 코드를 변경하지 않고도 기능을 추가하거나 변경할 수 있어야 한다.

    LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
    자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
    상속을 통한 재사용성을 증가시킬 수 있다.

    ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
    클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다.
    한 클래스에 자신이 필요하지 않는 인터페이스는 구현하지 않아야 한다.

    DIP (Dependency Inversion Principle, 의존 역전 원칙)
    상위 모듈이 하위 모듈에 의존해서는 안 되고, 둘 다 추상화에 의존해야 한다.
    모듈 간의 결합도를 줄이고 유연성을 증가시킬 수 있다.

  • Reuse/release equivalence principle (REP: 재사용/릴리즈 등가 원칙)

    재사용 가능한 코드는 함께 릴리즈되어야 한다
    재사용 가능한 컴포넌트는 그룹화되어 함께 버전 관리되고, 릴리즈되어야한다.
    이를 통해 컴포넌트의 재사용성을 높이고, 개발자들이 필요한 컴포넌트의 버전을 쉽게 찾고 이해할 수 있다.

  • Common closure principle (CCP: 공통 폐쇄 원칙)

    같이 변경될 가능성이 있는 코드는 함께 모아두어야 한다

  • Common reuse principle (CRP: 공통 재사용 원칙)

    같이 재사용될 코드는 함께 모아두어야 한다

  • Acyclic dependency principle (ADP: 의존성 비순환 원칙)

    코드 간의 의존성이 순환적이어서는 안 된다

0개의 댓글