ios 38일차

bin·2026년 2월 24일

회고

지금까지 공부한 Clean Architecture에 관한 내용 중 의존성 역전과 3-Layer에 대해 간단하게 정리하도록 하겠다. 자세한 내용과 구성요소들의 비교는 내일 다시 정리하겠다.

Clean Architecture

Clean Architecture를 이해하기 위해 의존성 역전에 대해 먼저 알아야 한다. "코드 하나를 수정했는데, 왜 수십개의 파일에서 오류가 발생하는가? 또는 수십개의 파일을 수정해야 하는가?"를 생각해보자.

1. 의존성 역전

소프트웨어는 항상 변할 수 있다.

  • 서버의 주소가 바뀌거나
  • 데이터를 가져오는 로직, 라이브러리가 변하거나
  • 데이터에 항목이 추가되거나
    위와 같은 상황들에서 소프트웨어는 항상 변한다.

그렇다면 의존이란?

  • 코드에서 "A가 B를 의존한다"라는 말은 "A가 동작하려면 B가 반드시 필요하다."라는 의미이다.
  • 예시를 하나 들어보겠다.
CategoryViewModel이 SystemCategoryAlamofire 클래스를 직접 가져다 쓰는 상황이다. 
이때, ViewModel은 Alamofire 클래스의 이름, DataType까지 모두 알고 있어야 한다.
만약, 서버 담당 클래스 B의 이름이 B+로 바뀐다면 어떻게 될까?
ViewModel도 B를 B+로 수정해야 한다.

해결법이 있을까?
이를 해결하기 위해 의존성 역전(DIP)가 사용된다.

  • [기존] ViewModel -> ServerClass
  • [역전된 방식] ViewModel -> Protocol <- ServerClass
    1. ViewModel의 선언: getCategory 함수만 있으면 된다. Protocol만 지켜줘
    1. ServerClass의 선언: Protocol대로 Data를 전달해줄게.

2. 3계층(3-layers) 구조

1. Domain Layer(앱의 심장)

  • 구성: Entity, UseCase, Repository(Protocol)
    앱이 존재하는 이유(비즈니스 로직)
  • 특징: 외부 라이브러리,DB에 의존하지 않으며 순수 Swift 코드로만 구성되어있다.

2. Presentation Layer(앱의 얼굴)

  • 구성: View, ViewController, ViewModel
    사용자에게 화면을 보여주고 입력을 받음
  • 특징: Domain Layer에 의존한다.

3. Data Layer(앱의 일꾼)

  • 구성: Repository Implement, API, DB, DTO
    실제 Data를 어디서 가져올지를 담당
  • 특징: Domain Layer에서 만들어둔 Procotol을 실제로 구현한다.

참고

ref) https://jaeseo0519.tistory.com/408#4.%20Domain%20Layer-1
ref) https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

0개의 댓글