클린 아키텍처 쉽게 이해하기 with SwiftUI 🔍 #85
OneMoreThink
started this conversation in
Idea
Replies: 3 comments 8 replies
-
Beta Was this translation helpful? Give feedback.
6 replies
-
Preview를 정말 잘 활용하신다는 생각이 들었습니다,,! (저도 꼭 적용해보고 싶네요 ㅎㅎ) |
Beta Was this translation helpful? Give feedback.
0 replies
-
3기 분이 추천해주셔서 읽어봤는데 너무 이해가 잘됩니다!! 다만 하나 궁금한게 있는데 다른 클린 아키텍처 글을 보니 Repository의 인터페이스는 도메인 영역에 두고 Repository의 구현체를 데이터에 두더라구요! 이렇게 하면 의존성 구조가 Presentation -> Domain <- Data 형태로 되어 도메인이 데이터 구조를 의존하지 않아 유지보수성에서 더 좋을 거 같다고 생각합니다! 혹시 이런 의존성 구조에 대해서는 어떻게 생각하시나요? 사실 저도 이제 클린 아키텍처를 공부하고 있어서 의견을 공유하고 싶어 질문 드립니다! |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
안녕하세요. 다들 안녕하신지요? 3기 아임 파인입니다.
매크로 챌린지도 어느덧 절반이상 지나가고 한달 남짓 남은 시점입니다. 🥺
지난 챌린지때에는 단순한 MVMM 구조에서 Service 또는 Manager를 따로 두어 각 ViewModel에서 필요한 기능들을 제공하는 방식을 선택했는데요. 🍎
이번 메크로 챌린지 때는 이전 챌린지들에 비해 프로젝트 규모가 커져 계층을 좀 더 명확히 나누고 데이터의 흐름을 잘 관리하고자 여러 아키텍쳐를 찾아보던 중 클린 아키텍쳐의 존재에 대해 알게되었습니다. 🛁
본격적인 개발에 들어가기 앞서 클린 아키텍쳐에 대해 명확히 이해하고 팀원들과 공유하고자 다음 글을 작성하였습니다.
혹시 다른 러너분들께도 조금이나 도움이될까 싶어 공유합니다. 🍅
클린 아키텍처가 뭔가요?
앱을 만들 때 코드를 역할별로 깔끔하게 나누는 방법이에요. 마치 서랍장에 물건을 종류별로 정리하는 것처럼, 코드도 하는 일에 따라 구분해서 관리하는 거죠.
클린 아키텍처의 계층 구조 이해하기 📚
계층이란? 🤔
앱의 코드를 역할별로 나눈 각각의 층을 말해요. 각 계층은 자기만의 역할이 있고, 다른 계층과 약속된 방식으로만 소통해요.
Domain Layer (핵심 계층) 💡
앱의 가장 기본이 되는 부분이에요. 마치 집을 지을 때 기초 공사가 중요한 것처럼, Domain Layer는 앱의 핵심적인 데이터 모델과 이를 다루는 규칙들을 담고 있답니다.
Entity: 실제 세상의 물건이나 개념을 앱 속에서 어떻게 표현할지 정하는 설계도예요.
Product
라는 설계도를 그리는 거예요. 마치 다양한 물건들(칫솔, 노트북 등)이 가진 공통된 특징들을 쏙쏙 뽑아서 앱에서 쓸 수 있게 정리하는 거죠!Use Case: 사용자가 앱에서 실제로 하고 싶은 일들을 구현하는 방법이에요!
Product
설계도를 가지고 실제로 어떤 일을 할 수 있을까요?Use Case는 마치 식당의 요리사와 같아요!
이렇게 Use Case를 만들면 좋은 점이 있어요
Data Layer (데이터 계층) 💾
앱에서 필요한 모든 데이터를 관리하는 층이에요! 마치 도서관처럼 필요한 정보를 가져오고, 보관하고, 정리하는 역할을 담당하죠.
Repository: 데이터를 가져오고 저장하는 창고 관리자예요! 🏪
먼저 Repository 설계도를 만들어볼까요?
이렇게 Repository를 두면 좋은 점이 있어요
Data Source: 실제로 데이터를 주고받는 친구예요! 🔄
이렇게 Data Source를 두면 좋은 점이 있어요
DTO (Data Transfer Object): 데이터 배달통이에요! 📦
이렇게 DTO를 두면 좋은 점이 있어요
Presentation Layer (화면 계층) 📱
사용자가 직접 보고 상호작용하는 화면을 만드는 층이에요! SwiftUI에서는 View와 ViewModel이 이 역할을 담당하죠.
View: 사용자에게 보여지는 화면을 구성해요 📺
ViewModel: 화면에 필요한 데이터를 관리하고 비즈니스 로직을 처리해요 🧑🔧
@Published
속성을 통해 데이터 변경을 View에 자동으로 알려줘요Clean Architecture의 데이터 흐름 🔄
1. 사용자 입력 -> 데이터 가져오기 흐름
예시로 "상품 목록 보기" 흐름을 따라가볼까요?
2. 사용자 입력 -> 데이터 저장 흐름
"상품 주문하기" 예시로 살펴볼까요?
주요 포인트 정리 🎯
단방향 데이터 흐름 : 바깥쪽(UI) → 안쪽(Data) 방향으로만 의존성이 있어요.
데이터 변환 : 각 계층마다 전용 데이터 구조를 두어 각 계층에는 해당 계층에 필요한 데이터들만 관리되요.
에러 처리 흐름 : 각 계층별로 발생하는 에러 또한 계층별로 격리시켜서 관리할 수 있어요.
Clean Architecture, 프로토콜 이용해 설계하자 🎯
프로토콜은 간단히 말해서 "이런 기능들은 꼭 구현해야 해!" 하고 약속하는 설계도예요.
예시로 살펴보는 프로토콜 활용
프로토콜을 사용하는 주요 이유 💡
의존성 역전 원칙 (Dependency Inversion)
테스트 용이성
유연한 구현체 교체
기능 명세의 명확성
프로토콜 사용의 장점 요약 🌟
느슨한 결합
테스트 용이성
명확한 책임과 역할
확장성
이렇게 프로토콜 기반으로 설계하면 앱이 더 견고해지고 유지보수하기 쉬워져요! 😊
Clean Architecture와 의존성 이해하기 💉
의존성이란?
의존성은 쉽게 말해서 "A가 B를 필요로 한다"는 관계를 말해요.
Clean Architecture에서의 의존성 규칙
각 계층은 안쪽 계층의 "추상화(프로토콜)"에만 의존해야 해요:
Clean Architecture에서의 의존성 주입
Clean Architecture에서 의존성 주입이 중요한 이유 🌟
계층 분리와 단방향 의존성
테스트 용이성
유지보수성
확장성
의존성 주입을 통해 Clean Architecture의 핵심 원칙들을 지킬 수 있어요:
이렇게 의존성을 잘 관리하면 앱이 더 견고해지고 유지보수하기 좋아져요! 😊
Clean Architecture 구조도 한눈에 보기 👀
각 레이어의 경계와 각 레이어를 구성하는 컴포넌트들 사이에 의존관계 그리고 실제 구현과 전체 데이터의 흐름을 아래와 같이 그림으로 나타내볼 수 있어요.
SwiftUI Preview와 의존성 주입 활용하기 🎨
1. Preview 전용 Container 만들기
2. Preview Provider 구성하기
3. 재사용 가능한 Preview 컴포넌트
4. 실제 View에서 활용
5. 더 나은 Preview를 위한 팁들 💡
이렇게 의존성 주입을 활용한 Preview를 구성하면:
Preview를 잘 활용하면 UI 개발 속도가 훨씬 빨라지고, 품질도 높아져요! 😊
Beta Was this translation helpful? Give feedback.
All reactions