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 디자인 패턴 완벽 가이드 - 슬라이드 1/11

iOS 디자인 패턴 완벽 가이드

iOS 개발에서 자주 사용되는 핵심 디자인 패턴들을 초급자도 쉽게 이해할 수 있도록 설명합니다. MVC, MVVM, Singleton 등 실무에서 필수적인 패턴들을 실제 코드 예제와 함께 배워보세요.


카테고리:Swift
언어:Swift
난이도:beginner
메인 태그:#Swift
서브 태그:
#MVC#MVVM#Singleton#Delegate

들어가며

이 글에서는 iOS 디자인 패턴 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. MVC_패턴
  2. Singleton_패턴
  3. Delegate_패턴
  4. Observer_패턴_NotificationCenter
  5. MVVM_패턴
  6. Factory_패턴
  7. Builder_패턴
  8. Coordinator_패턴
  9. Strategy_패턴
  10. 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