본문 바로가기
SwiftUI

SwiftUI에서 팩토리 패턴 적용하기

by 안될개발 2025. 3. 6.

SwiftUI에서 팩토리 패턴 적용하기

SwiftUI에서 팩토리 패턴 적용하기

SwiftUI에서 팩토리 패턴(Factory Pattern)을 적용하면 코드의 유연성과 확장성을 높일 수 있습니다. 특히, 다양한 View를 동적으로 생성하거나 특정 조건에 따라 View를 반환해야 할 때 유용합니다. 이번 글에서는 SwiftUI에서 팩토리 패턴을 구현하는 방법과 실제 예제를 통해 이를 적용하는 방법을 알아보겠습니다.

1. 팩토리 패턴이란?

팩토리 패턴은 객체 생성 로직을 별도의 팩토리(Factory) 클래스로 분리하는 디자인 패턴입니다. 객체 생성을 책임지는 부분을 따로 관리함으로써 코드의 결합도를 낮추고 변경에 유연하게 대응할 수 있습니다.

팩토리 패턴의 장점

  • 유지보수성: 객체 생성 로직을 한 곳에 모아서 관리
  • 확장성: 새로운 타입 추가 시 기존 코드를 변경할 필요 없음
  • 유연성: 런타임에서 객체 생성 유형을 결정 가능

2. SwiftUI에서 팩토리 패턴 활용 예제

목표

  • ContentView에서 여러 종류의 View를 동적으로 생성
  • View 생성 로직을 팩토리로 분리

1) View 정의하기

import SwiftUI

// 여러 종류의 View 정의
struct HomeView: View {
    var body: some View {
        Text("홈 화면")
    }
}

struct ProfileView: View {
    var body: some View {
        Text("프로필 화면")
    }
}

struct SettingsView: View {
    var body: some View {
        Text("설정 화면")
    }
}

2) 팩토리 구현하기

// 생성할 View의 종류를 열거형으로 정의
enum ViewType {
    case home
    case profile
    case settings
}

// View를 생성하는 팩토리 구현
struct ViewFactory {
    @ViewBuilder
    static func makeView(for type: ViewType) -> some View {
        switch type {
        case .home:
            HomeView()
        case .profile:
            ProfileView()
        case .settings:
            SettingsView()
        }
    }
}

3) ContentView에서 팩토리 사용하기

struct ContentView: View {
    @State private var selectedView: ViewType = .home

    var body: some View {
        VStack {
            Picker("화면 선택", selection: $selectedView) {
                Text("홈").tag(ViewType.home)
                Text("프로필").tag(ViewType.profile)
                Text("설정").tag(ViewType.settings)
            }
            .pickerStyle(SegmentedPickerStyle())
            .padding()

            // 팩토리를 사용해 View 생성
            ViewFactory.makeView(for: selectedView)

            Spacer()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

3. 팩토리 패턴 적용의 장점

  1. 객체 생성 로직의 분리: View 생성 로직이 ViewFactory로 집중되어 유지보수가 쉬워집니다.
  2. 코드 중복 감소: 여러 곳에서 같은 View를 생성할 때 중복된 코드가 줄어듭니다.
  3. 유연한 확장: 새로운 View를 추가할 때 ViewFactory에만 수정하면 됩니다.

4. 정리

SwiftUI에서 팩토리 패턴을 활용하면 View 생성 로직을 깔끔하게 분리하고 관리할 수 있습니다. 다양한 화면을 동적으로 생성해야 할 때 특히 유용하며, 코드의 확장성과 유지보수성을 높이는 데 큰 도움이 됩니다.

앞으로 다양한 디자인 패턴을 SwiftUI에 적용해보며 더욱 유연하고 견고한 코드를 작성해 보시기 바랍니다!