본문 바로가기

IOS 개발지식/iOS

[iOS] 클린 아키텍처

Clean Architecture!

정말 많이 들었고.. 완전하게 이해하진 않아도 조금씩 적용해 봤던 거였는데,

최근 과제전형을 진행하면서 제대로 적용하려고 공부했고 이를 잊지 않으려고 정리한다

 

로버트 C. 마틴 <Clean Architecture> 책에 따르면, 소프트웨어에는
집단 외부의 행위(Behavior)적 가치와 집단 내부의 구조(Structure)적 가치가 존재한다고 한다

 

행위적 (Behavior) 가치

집단 내 여러 이해 관계자의 기능 명세서나 요구사항 문서를 실제 프로덕트로 구현하는 Programmer의 가치

구조적 (Structure) 가치

Software 단어에서 Soft라는 본연의 목적에 맞춰 기존 행위를 쉽게 변경할 수 있어야 한다는 Developer의 가치

 

클린 아키텍처는 구조적 가치에 해당하는 개념으로 객체지향 5대 원칙인 SOLID를 기본적으로 알고 접근하면 이해하기 편하다,,

 

 

Clean Architecture

 

소프트웨어 구조를 계층화 함으로 관심사를 분리한 구조이며, 이 때 의존성 방향은 외부 계층에서 내부 계층으로 향한다

 

이 의존성 방향에 따르면 안에 있는 레이어들은 외부 레이어를 몰라야 한다!

또한, 의존성 역전 개념을 도입해 같이 고수준 모듈(내부 레이어)이 저수준 모듈(외부 레이어)을 의존하지 않도록 한다

+ 그래서 저수준 모듈의 프로토콜을 만들어 이를 참조하게 한다

 

글로 적으니까 엄청 어려워 보이네 ㅠㅠ

그래도 하나씩 직접 구현하고 적용해보면,, 익숙해지겠지

 

아무튼,, 클린 아키텍처의 구조는 아래 그림이 대표적이다

 

 

각 레이어를 아래와 같이 3가지 영역으로 주로 묶는다순서는 내부 레이어에서 바깥 레이어로,,

 

클린 아키텍처가 항상 정답은 아니고 개발자마다 정의하고 사용하는 건 다르겠지만

공부하고 적용했던 아키텍처 구조에 대해 글로 작성한다

 

Data 영역: Model, Repository, (Network)

Domain 영역: Entity, Use Cases, (Repository Protocol)

Presentation 영역: View, (ViewModel)

 

여기서 괄호는 필요에 의해 추가 혹은 빼도 되는 레이어다,,

의존성 역전을 위한 Repository Protocol, 네트워크 통신을 위한 Network 그리고 MVVM 설계를 도입하여 ViewModel

 

Data 영역

1. Model: 네트워크 설계에 따른 데이터 모델

2. Repository: 데이터를 실제 가공하는 역할 수행

3. Network: 외부 API 연결 통신 역할 수행

 

Domain 영역

1. Entity: 가장 내부 레이어로 불변하는 핵심 모델 정의

2. Use Cases: 비즈니스 로직 (중심부 역할)

3. Repository Protocol: Repository 레이어의 인터페이스

 

Presentation 영역

1. View 혹은 ViewController: 사용자가 보는 UI 생성

2. ViewModel: UI와 연관된 비즈니스 로직 담당

 

 

각 영역의 의존성 방향은 다음과 같다

 

 

구현 단계와 관련되서 기재한 내용이 100% 정답은 아니다!

클린 아키텍처의 가장 큰 틀은 관심사 분리로 역할을 나누고 의존성 규칙을 적용한 것 :)

 

+ 비지니스 로직이란? (면접때 배운 내용)

 

'IOS 개발지식 > iOS' 카테고리의 다른 글

[iOS] XCTest를 활용한 UnitTest  (1) 2024.11.13
[iOS] RxSwift와 Combine  (2) 2024.11.11
[iOS] AppDelegate와 SceneDelegate  (2) 2024.11.08
[iOS] 앱 생명주기(App Life Cycle)  (5) 2024.11.07