Swift 완벽 마스터
Swift의 핵심 개념과 실전 활용법
TypeScript중급
10시간
5개 항목
학습 진행률0 / 5 (0%)
학습 항목
1. Swift
초급iOS|디자인|패턴|완벽|가이드
퀴즈튜토리얼
2. TypeScript
중급Swift|디자인|패턴|완벽|가이드
퀴즈튜토리얼
3. TypeScript
초급iOS|실무|활용|팁|초급자
퀴즈튜토리얼
4. TypeScript
중급iOS|트러블슈팅|완벽|가이드
퀴즈튜토리얼
5. iOS
중급iOS|성능|최적화|완벽|가이드
퀴즈튜토리얼
1 / 5
이미지 로딩 중...
iOS 디자인 패턴 완벽 가이드
iOS 개발에서 자주 사용되는 핵심 디자인 패턴들을 초급자도 쉽게 이해할 수 있도록 설명합니다. MVC, MVVM, Singleton 등 실무에서 필수적인 패턴들을 실제 코드 예제와 함께 배워보세요.
카테고리:Swift
언어:Swift
난이도:beginner
메인 태그:#Swift
서브 태그:
#MVC#MVVM#Singleton#Delegate
들어가며
이 글에서는 iOS 디자인 패턴 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- MVC_패턴
- Singleton_패턴
- Delegate_패턴
- Observer_패턴_NotificationCenter
- MVVM_패턴
- Factory_패턴
- Builder_패턴
- Coordinator_패턴
- Strategy_패턴
- Adapter_패턴
1. MVC_패턴
개요
Model-View-Controller 패턴은 iOS의 기본 아키텍처입니다. 데이터(Model), 화면(View), 로직(Controller)을 분리하여 관리합니다.
코드 예제
```swift
// Model
struct User {
let name: String
let age: Int
}
// View Controller
class UserViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
var user: User? {
didSet {
nameLabel.text = user?.name
}
}
}
### 설명
Model은 데이터를 담고, ViewController가 Model과 View를 연결합니다. didSet을 통해 데이터가 변경되면 자동으로 UI가 업데이트됩니다.
---
## 2. Singleton_패턴
### 개요
앱 전체에서 단 하나의 인스턴스만 존재하도록 보장하는 패턴입니다. 설정 관리나 네트워크 클라이언트에 주로 사용됩니다.
### 코드 예제
```swift
```swift
class NetworkManager {
static let shared = NetworkManager()
private init() {}
func fetchData() {
print("데이터 가져오기")
}
}
// 사용
NetworkManager.shared.fetchData()
### 설명
private init()으로 외부 생성을 막고, static let shared로 유일한 인스턴스를 제공합니다. 어디서든 .shared로 접근 가능합니다.
---
## 3. Delegate_패턴
### 개요
객체 간 통신을 위한 패턴으로, 한 객체가 다른 객체에게 작업을 위임합니다. UITableView 등에서 널리 사용됩니다.
### 코드 예제
```swift
```swift
protocol DataDelegate: AnyObject {
func didReceiveData(_ data: String)
}
class DataManager {
weak var delegate: DataDelegate?
func processData() {
delegate?.didReceiveData("처리완료")
}
}
### 설명
protocol로 인터페이스를 정의하고, weak으로 메모리 누수를 방지합니다. delegate를 통해 결과를 전달합니다.
---
## 4. Observer_패턴_NotificationCenter
### 개요
이벤트 발생 시 여러 객체에게 알림을 보내는 패턴입니다. NotificationCenter를 통해 느슨한 결합을 구현합니다.
### 코드 예제
```swift
```swift
// 알림 보내기
NotificationCenter.default.post(
name: NSNotification.Name("UserLoggedIn"),
object: nil
)
// 알림 받기
NotificationCenter.default.addObserver(
self,
selector: #selector(handleLogin),
name: NSNotification.Name("UserLoggedIn"),
object: nil
)
### 설명
post로 알림을 보내고, addObserver로 구독합니다. 여러 객체가 동시에 같은 이벤트를 감지할 수 있습니다.
---
## 5. MVVM_패턴
### 개요
Model-View-ViewModel 패턴은 UI 로직과 비즈니스 로직을 분리합니다. ViewModel이 View와 Model 사이의 중재자 역할을 합니다.
### 코드 예제
```swift
```swift
class UserViewModel {
var name: String = "" {
didSet {
nameUpdated?(name)
}
}
var nameUpdated: ((String) -> Void)?
func updateName(_ newName: String) {
name = newName.uppercased()
}
}
### 설명
ViewModel은 View와 독립적으로 테스트 가능합니다. 클로저를 통해 데이터 변경을 View에 알립니다.
---
## 6. Factory_패턴
### 개요
객체 생성 로직을 캡슐화하는 패턴입니다. 어떤 클래스의 인스턴스를 만들지 서브클래스에서 결정합니다.
### 코드 예제
```swift
```swift
protocol Animal {
func speak() -> String
}
class Dog: Animal {
func speak() -> String { "멍멍" }
}
class AnimalFactory {
static func create(type: String) -> Animal? {
return type == "dog" ? Dog() : nil
}
}
### 설명
Factory 클래스가 객체 생성을 담당하여 코드의 유연성을 높입니다. 새로운 타입 추가가 쉬워집니다.
---
## 7. Builder_패턴
### 개요
복잡한 객체를 단계별로 생성하는 패턴입니다. 생성 과정을 명확하게 만들고 가독성을 높입니다.
### 코드 예제
```swift
```swift
class URLBuilder {
private var components = URLComponents()
func setScheme(_ scheme: String) -> Self {
components.scheme = scheme
return self
}
func setHost(_ host: String) -> Self {
components.host = host
return self
}
func build() -> URL? {
return components.url
}
}
### 설명
메서드 체이닝으로 가독성 좋게 객체를 생성합니다. return self를 통해 연속적인 호출이 가능합니다.
---
## 8. Coordinator_패턴
### 개요
화면 전환 로직을 분리하여 관리하는 패턴입니다. ViewController의 책임을 줄이고 네비게이션을 중앙화합니다.
### 코드 예제
```swift
```swift
protocol Coordinator {
func start()
}
class AppCoordinator: Coordinator {
let navigationController: UINavigationController
init(navigationController: UINavigationController) {
self.navigationController = navigationController
}
func start() {
let vc = MainViewController()
navigationController.pushViewController(vc, animated: true)
}
}
### 설명
Coordinator가 화면 전환을 관리하여 ViewController는 화면 표시에만 집중합니다. 앱의 흐름을 한 곳에서 제어합니다.
---
## 9. Strategy_패턴
### 개요
알고리즘을 캡슐화하여 상황에 따라 교체할 수 있게 하는 패턴입니다. 동일한 인터페이스로 다른 동작을 수행합니다.
### 코드 예제
```swift
```swift
protocol SortStrategy {
func sort(_ array: [Int]) -> [Int]
}
class QuickSort: SortStrategy {
func sort(_ array: [Int]) -> [Int] {
return array.sorted()
}
}
class Sorter {
var strategy: SortStrategy
init(strategy: SortStrategy) {
self.strategy = strategy
}
func performSort(_ data: [Int]) -> [Int] {
return strategy.sort(data)
}
}
### 설명
런타임에 알고리즘을 변경할 수 있습니다. strategy를 교체하여 다양한 정렬 방식을 사용할 수 있습니다.
---
## 10. Adapter_패턴
### 개요
호환되지 않는 인터페이스를 연결하는 패턴입니다. 기존 코드를 수정하지 않고 새로운 기능을 통합할 수 있습니다.
### 코드 예제
```swift
```swift
protocol NewAPI {
func fetchData() -> String
}
class OldAPI {
func getData() -> String {
return "레거시 데이터"
}
}
class APIAdapter: NewAPI {
let oldAPI = OldAPI()
func fetchData() -> String {
return oldAPI.getData()
}
}
### 설명
Adapter가 구버전 API를 신버전 인터페이스로 변환합니다. 기존 코드를 수정하지 않고 통합 가능합니다. --- iOS 개발의 핵심 디자인 패턴 10가지를 정리했습니다. 각 패턴은 실제 프로젝트에서 바로 적용할 수 있는 코드 예제와 함께 제공됩니다.
---
## 마치며
이번 글에서는 iOS 디자인 패턴 완벽 가이드에 대해 알아보았습니다.
총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
### 관련 태그
#Swift #MVC #MVVM #Singleton #Delegate
#Swift#MVC#MVVM#Singleton#Delegate