계층: 도메인, 데이터 및 프레젠테이션
Swift 앱에서 비즈니스 로직을 데이터 접근 및 UI와 분리합니다.
계층: 도메인, 데이터 및 프레젠테이션은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
스위프트의 클린 아키텍처
클린 아키텍처는 코드를 계층으로 나눕니다. 도메인(비즈니스 로직), 데이터(영속성 및 네트워크), 프레젠테이션(UI)으로 구성됩니다.
// Domain: pure Swift, no framework imports
// Data: Core Data / URLSession / JSON
// Presentation: SwiftUI / UIKit도메인 계층
도메인 계층에는 비즈니스 엔터티, 유스 케이스, 리포지토리 프로토콜이 포함됩니다. 이 계층은 유아이킷, SwiftUI 또는 데이터베이스에 의존하지 않습니다.
// Domain/Entities/User.swift
struct User {
let id: Int
var name: String
var email: String
}
// No import UIKit, no import SwiftData도메인의 유스 케이스
유스 케이스는 하나의 특정 비즈니스 작업을 캡슐화합니다. 도메인의 리포지토리 프로토콜에만 의존합니다.
// Domain/UseCases/FetchUserUseCase.swift
struct FetchUserUseCase {
let repo: UserRepository
func execute(id: Int) async throws -> User {
try await repo.getUser(id: id)
}
}도메인의 리포지토리 프로토콜
리포지토리 프로토콜은 데이터 접근 계약을 정의합니다. 프로토콜은 도메인이 소유하고, 데이터 계층이 구현을 제공합니다.
// Domain/Repositories/UserRepository.swift
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}데이터 계층
데이터 계층은 구체적인 기술(URL 세션, 코어 데이터, SwiftData, 키체인)을 사용해 도메인 프로토콜을 구현합니다.
// Data/Repositories/RemoteUserRepository.swift
struct RemoteUserRepository: UserRepository {
func getUser(id: Int) async throws -> User {
let data = try await URLSession.shared.data(from: userURL(id)).0
return try JSONDecoder().decode(User.self, from: data)
}
func saveUser(_ user: User) async throws { /* PUT request */ }
}데이터 전송 객체
DTO는 데이터 계층에서 API 응답을 디코딩한 다음 도메인 엔터티로 매핑하는 데 사용하는 Codable 유형입니다.
struct UserDTO: Decodable {
var user_id: Int
var full_name: String
func toDomain() -> User { User(id: user_id, name: full_name, email: "") }
}프레젠테이션 계층
프레젠테이션 계층에는 ViewModels와 SwiftUI 뷰가 포함됩니다. 이 계층은 유스 케이스를 호출하고 관찰 가능한 상태를 노출합니다.
// Presentation/ViewModels/ProfileViewModel.swift
@MainActor
final class ProfileViewModel: ObservableObject {
@Published var user: User?
private let useCase: FetchUserUseCase
init(useCase: FetchUserUseCase) { self.useCase = useCase }
func load(id: Int) async {
user = try? await useCase.execute(id: id)
}
}의존성의 방향
의존성은 안쪽을 향합니다. 프레젠테이션은 도메인에 의존하고, 데이터는 도메인에 의존합니다. 도메인은 아무것에도 의존하지 않습니다.
// Outer → Inner dependency rule:
Presentation → Domain ← Data
// Domain is the stable core; outer layers are swappable폴더 구조
규모가 큰 앱에서는 스위프트 파일을 먼저 계층별로 나눈 다음 기능별로 구성하십시오.
// MyApp/
// ├── Domain/
// │ ├── Entities/
// │ ├── UseCases/
// │ └── Repositories/ (protocols)
// ├── Data/
// │ └── Repositories/ (implementations)
// └── Presentation/
// ├── Views/
// └── ViewModels/장점
계층형 아키텍처를 사용하면 독립적으로 테스트하고, 구현을 교체하며, 여러 팀이 병렬로 개발할 수 있습니다.
// Test Domain in isolation: no network, no DB
// Swap RemoteUserRepo with LocalUserRepo for offline mode
// Teams own layers independently일반적인 실수
도메인 계층에서 유아이킷/SwiftUI를 가져오지 말고, 비즈니스 로직이 뷰로 새어 들어가지 않도록 하십시오.
// WRONG: Domain entity with SwiftUI Color
struct Product {
var color: Color // UIKit/SwiftUI import in Domain!
}
// CORRECT: Use a plain string or enum
struct Product { var colorHex: String }빠른 확인
클린 아키텍처에서 리포지토리 프로토콜을 소유하는 계층은 어디입니까?
학습 내용 정리
클린 아키텍처의 계층은 도메인(엔터티, 유스 케이스, 프로토콜 계약), 데이터(네트워크 및 데이터베이스 구현), 프레젠테이션(UI 및 ViewModels)으로 구성됩니다. 의존성은 도메인을 향해 안쪽으로 흐릅니다. 도메인에는 프레임워크 의존성이 전혀 없으므로 완전히 단위 테스트할 수 있습니다.
자주 묻는 질문
“계층: 도메인, 데이터 및 프레젠테이션” 강의는 무료인가요?
네 — “계층: 도메인, 데이터 및 프레젠테이션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“계층: 도메인, 데이터 및 프레젠테이션”에서 뭘 배우나요?
Swift 앱에서 비즈니스 로직을 데이터 접근 및 UI와 분리합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“계층: 도메인, 데이터 및 프레젠테이션” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 계층: 도메인, 데이터 및 프레젠테이션
- 사용 사례와 리포지토리 패턴
- 프로토콜 추상화를 통한 의존성 역전
- DI 프레임워크 없이 계층 연결하기