클릭아키텍처는 추상화 개념으로 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처이다.
그 동안 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: 의존성 비순환 원칙) > 코드 간의 의존성이 순환적이어서는 안 된다
머리속에 있는걸 한층 정리한 느낌이다~~