일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 디자인 트렌드
- 뉴북
- 뉴모피즘
- 코드리팩토링
- SWIFT
- Xcodebuild
- coordinator pattern
- Git Tutorial
- viewDidLoad
- commit message
- 입력 개수 제한
- 스큐어모피즘
- 아이폰
- 패스트캠퍼스
- 픽셀
- viewDidAppear
- git
- 포인트
- iOS앱개발올인원패키지Online.
- 플랫디자인
- 직장인인강
- 직장인자기계발
- 8 그리드 시스템
- commit
- 머티리얼 디자인
- ios
- 패스트캠퍼스후기
- commit messages
- git workflow
- 패캠챌린지
- Today
- Total
왕논의 연구실
Coordinator 패턴 + Factory 패턴 본문
Coordinator 패턴 + Factory 패턴을 함께 사용하는 이유와 방법
iOS 앱 개발에서 화면 전환을 효과적으로 관리하기 위해 Coordinator 패턴을 많이 사용합니다.
여기에 Factory 패턴을 결합하면 유지보수성과 확장성이 더욱 향상됩니다.
이번 글에서는 Coordinator 패턴과 Factory 패턴을 함께 사용하는 이유와
어떻게 적용하는지에 대해 설명하겠습니다. 🚀
✅ 1. Coordinator 패턴과 Factory 패턴의 개념
📌 Coordinator 패턴이란?
Coordinator 패턴은 화면 전환을 별도의 객체(Coordinator)가 담당하는 패턴입니다.
- 화면 이동 로직을 한 곳에서 관리
- ViewController 간 의존성을 줄여 유지보수가 쉬움
- 새로운 화면이 추가될 때 Coordinator만 수정하면 됨
📌 Factory 패턴이란?
Factory 패턴은 객체 생성을 한 곳에서 관리하는 패턴입니다.
- 특정 객체(ViewController)를 생성하는 책임을 Factory 클래스가 담당
- 객체 생성을 중앙에서 관리할 수 있음
- 다양한 조건에 따라 적절한 객체를 생성할 수 있음
✅ 2. Coordinator 패턴과 Factory 패턴을 함께 사용하는 이유
1️⃣ 다양한 조건에 따라 화면을 동적으로 생성해야 할 때
예를 들어, 사용자가 앱을 실행할 때 로그인 여부에 따라 다른 첫 화면을 보여줘야 하는 경우
if isLoggedIn {
navigateToMainScreen()
} else {
navigateToLoginScreen()
}
이처럼 화면을 조건에 따라 생성해야 하는 경우 Factory 패턴이 유용합니다.
2️⃣ Coordinator 내부에서 ViewController를 직접 생성하지 않도록 하기 위해
보통 Coordinator는 화면 이동만 담당해야 하는데,
ViewController를 직접 생성하면 Coordinator의 역할이 너무 많아지고 유지보수가 어려워집니다.
❌ 좋지 않은 방식 (Coordinator에서 ViewController 직접 생성)
class MainCoordinator: Coordinator {
func start() {
let homeVC = HomeViewController() // ❌ 직접 생성
let settingsVC = SettingsViewController() // ❌ 직접 생성
let tabBarController = UITabBarController()
tabBarController.viewControllers = [homeVC, settingsVC]
}
}
➡ 화면을 변경하려면 Coordinator를 직접 수정해야 함
3️⃣ ViewController 생성 방식을 일관되게 유지하기 위해
Factory 패턴을 사용하면 모든 ViewController 생성 로직을 한 곳에서 관리할 수 있습니다.
이렇게 하면 코드 일관성이 유지되고, 변경이 쉬워집니다.
✅ 3. Coordinator + Factory 패턴 적용 예제
이제 실제 코드 예제를 보면서 어떻게 적용하는지 알아보겠습니다! 🚀
📌 1️⃣ ViewControllerFactory 구현
📌 Factory 패턴을 사용해 ViewController를 생성하는 클래스
class ViewControllerFactory {
static func createViewController(type: ViewControllerType) -> UIViewController {
switch type {
case .home:
return HomeViewController()
case .settings:
return SettingsViewController()
case .login:
return LoginViewController()
}
}
}
enum ViewControllerType {
case home
case settings
case login
}
📌 Factory 패턴을 사용하면:
✅ ViewControllerFactory.createViewController(.home)
처럼 코드가 간결해짐
✅ 새로운 ViewController를 추가할 때 Factory만 수정하면 됨
📌 2️⃣ Coordinator에서 Factory를 사용하여 화면을 생성
📌 Coordinator에서 직접 ViewController를 생성하지 않고, Factory에서 생성된 인스턴스를 사용합니다.
class MainCoordinator: Coordinator {
private let tabBarController: UITabBarController
init(tabBarController: UITabBarController) {
self.tabBarController = tabBarController
}
func start() {
let homeVC = ViewControllerFactory.createViewController(type: .home)
let settingsVC = ViewControllerFactory.createViewController(type: .settings)
tabBarController.viewControllers = [
UINavigationController(rootViewController: homeVC),
UINavigationController(rootViewController: settingsVC)
]
}
}
📌 개선점:
✅ MainCoordinator
는 화면 이동만 관리하고 ViewController 생성 책임을 Factory에 넘김
✅ 새로운 화면을 추가하려면 Factory만 수정하면 됨 (Coordinator 수정 불필요)
📌 3️⃣ 로그인 여부에 따라 다른 화면을 보여주는 경우
📌 앱 시작 시 로그인 여부에 따라 다른 화면을 Factory에서 생성하도록 설정할 수 있습니다.
class AppCoordinator: Coordinator {
private let window: UIWindow
init(window: UIWindow) {
self.window = window
}
func start() {
let navigationController = UINavigationController()
let initialVC: UIViewController
if UserManager.shared.isLoggedIn {
initialVC = ViewControllerFactory.createViewController(type: .home)
} else {
initialVC = ViewControllerFactory.createViewController(type: .login)
}
navigationController.viewControllers = [initialVC]
window.rootViewController = navigationController
window.makeKeyAndVisible()
}
}
📌 개선점:
✅ 로그인 여부에 따라 화면이 달라질 때도 Factory에서 일관되게 관리
✅ AppCoordinator
는 화면 이동만 관리하고, ViewController 생성은 Factory에 위임
✅ 4. Coordinator + Factory 패턴을 함께 사용하면 좋은 경우
💡 1. 앱에서 특정 조건에 따라 다른 화면을 보여줘야 할 때
- 로그인 여부에 따라 홈 화면 or 로그인 화면을 다르게 보여줄 경우
💡 2. ViewController를 동적으로 생성해야 할 때 - 다양한 탭이나 기능이 추가되는 경우
💡 3. ViewController 생성을 일관되게 유지하고 싶을 때 - Factory에서 모든 ViewController 생성 로직을 관리
🚀 정리: Coordinator + Factory 패턴을 함께 사용하는 이유
기존 방식 ❌ | Coordinator + Factory 방식 ✅ |
---|---|
Coordinator에서 직접 ViewController 생성 | Factory에서 ViewController를 생성 |
새로운 ViewController 추가 시 Coordinator도 수정해야 함 | Factory만 수정하면 됨 |
ViewController 생성 코드가 여러 곳에 중복됨 | Factory에서 일괄 관리 가능 |
유지보수가 어렵고 변경 시 코드 수정량이 많음 | 유지보수가 쉽고 확장성이 뛰어남 |
📌 Coordinator 패턴과 Factory 패턴을 함께 사용하면 화면 전환 관리가 더욱 유연하고 유지보수가 쉬워집니다!
'iOS > Swift' 카테고리의 다른 글
CoreBluetooth (0) | 2025.04.03 |
---|---|
Apple API Guidelines - Naming (0) | 2025.03.19 |
의존성 역전 원칙(DIP)이란? (0) | 2025.03.17 |
Coordinator 패턴을 활용한 화면 전환 관리 비교 (0) | 2025.03.16 |
Coordinator 패턴을 적용한 앱 예제 (0) | 2025.03.16 |