Swift - Clean Architecture

Marble·2025년 1월 4일

Clean Architecture

목록 보기
1/5

Clean Architecture란?

클린 아키텍처는 소프트웨어 개발에서 매우 중요한 개념으로, 코드의 유지보수성과 확장성을 높이기 위해 설계된 구조입니다. 이 글에서는 클린 아키텍처의 개념과 구조에 대해 알아보겠습니다.

클린 아키텍처는 소프트웨어의 각 구성 요소를 명확하게 분리하여, 서로의 의존성을 최소화하고, 변경이 용이하도록 설계되었습니다. 클린 아키텍처는 주로 비즈니스 로직과 UI를 분리하여, 비즈니스 로직이 UI에 의존하지 않도록 합니다. 이러한 구조는 코드의 재사용성을 높이고, 테스트를 용이하게 만들어 줍니다.

장점

  1. 코드의 가독성이 높아집니다. 각 레이어가 명확하게 분리되어 있어, 개발자가 코드를 이해하기 쉬워집니다.
  2. 유지보수가 용이합니다. 비즈니스 로직과 UI가 분리되어 있기 때문에, UI를 변경하더라도 비즈니스 로직에 영향을 주지 않습니다.
  3. 테스트가 용이합니다. 각 레이어가 독립적으로 테스트할 수 있어, 유닛 테스트를 통해 코드의 품질을 높일 수 있습니다.

레이어 구조

위 이미지는 클린 아키텍처 예시로 크게 4가지의 레이어로 나뉘어져 있습니다. 레이어는 안쪽에 위치할수록 고수준 정책을, 바깥쪽에 위치할 수록 저수준 정책을 의미합니다.
레이어들은 다음과 같은 특징을 가지고 있습니다.

  • 소스 코드는 안쪽을 향해서만 의존할 수 있다.
  • 안쪽의 원은 바깥쪽의 원에 대해 전혀 알지 못한다. 특히, 바깥쪽의 원에서 선언된 어떠한 이름을 안쪽 원에서 참조해서는 안된다.
  • 바깥쪽 원의 어떠한 것도 안쪽의 원에 영향을 줘선 안된다.

각각의 레이어에 대해 알아보겠습니다.

엔티티 (Entity)

엔티티는 애플리케이션의 핵심 비즈니스 규칙과 도메인 모델을 포함합니다. 애플리케이션의 비즈니스 로직을 표현하는 객체들로 구성되며 하나 이상의 프로그램 간에 공유될 수 있다는 가정하에 만들기 때문에 수명이 깁니다. 즉, 재사용의 가능성이 높다는 것을 인지하고 외부에 의해 변경될 가능성을 낮추어야 합니다.
외부 시스템이나 프레임워크에 의존하지 않으며, 도메인 로직을 중심으로 설계됩니다. 예를 들어, 사용자, 주문, 제품 등의 도메인 객체가 여기에 해당되며, 예제 프로젝트에서는 아래와 같은 모델을 엔티티라고 합니다.

유스케이스(Use Case):

애플리케이션 계층으로도 불리는 유스케이스 레이어는 애플리케이션의 특정 기능을 정의하고, 엔티티를 사용하여 비즈니스 로직을 수행합니다. 이 레이어는 사용자의 요구 사항을 충족하는 작업을 처리합니다. 유스케이스는 애플리케이션의 특정 작업을 수행하는 메서드를 포함합니다.
이 레이어의 변경사항은 엔티티에 영향을 미쳐서는 안 되며, 인프라 단의 DB나 UI, 라이브러리와 같은 외부요소에 의해 영향을 받지 않는다는 것을 원칙으로 합니다.

인터페이스 어댑터(Interface Adapters):

이 레이어는 외부 시스템(예: UI, 데이터베이스, API 등)과 유스케이스 간의 상호작용을 담당합니다. 인터페이스 어댑터는 데이터 형식을 변환하고, 유스케이스에 필요한 형식으로 데이터를 전달합니다. 흔히 MVC, MVVM과 같은 아키텍처들이 여기에 포함되며 뷰모델, 프레젠터, 컨트롤러 등이 속합니다.

프레임워크 및 드라이버(Frameworks and Drivers):

인프라 계층이라고도 불리는 이 레이어는 외부 라이브러리, 프레임워크, 데이터베이스, UI 프레임워크 등과 같은 외부 종속성을 포함합니다. 이 레이어는 애플리케이션의 나머지 부분과 분리되어 있어, 외부 기술의 변경이 애플리케이션의 비즈니스 로직에 영향을 미치지 않도록 합니다.

Reference

profile
개발자가 되고 싶은 공돌이

0개의 댓글