0Pricing
Swift Academy · 강의

계층: 도메인, 데이터 및 프레젠테이션

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 계층: 도메인, 데이터 및 프레젠테이션
  2. 사용 사례와 리포지토리 패턴
  3. 프로토콜 추상화를 통한 의존성 역전
  4. DI 프레임워크 없이 계층 연결하기
← Swift Academy(으)로 돌아가기