학습
Swift 디자인 패턴 기초
Swift 디자인 패턴 기초 — 중급
디자인 패턴 기초
1. 도입 (왜 배워야 하는가)
디자인 패턴은 소프트웨어 개발에서 반복적으로 발생하는 문제를 해결하기 위한 일반적인 솔루션입니다. 실무에서 디자인 패턴을 이해하고 활용하는 것은 코드의 재사용성과 유지보수성을 높이며, 팀원 간의 의사소통을 원활하게 해줍니다.
디자인 패턴을 모르면, 같은 문제를 반복해서 해결하게 되어 비효율적인 코드를 작성할 수 있습니다. 또한, 새로운 팀원이 코드베이스를 이해하는 데 어려움을 겪고, 결과적으로 프로젝트의 품질과 일정에 악영향을 미칠 수 있습니다.
2. 핵심 개념 설명
디자인 패턴에는 여러 가지 종류가 있지만, 크게 세 가지 카테고리로 나눌 수 있습니다.
| 카테고리 | 설명 |
|---|---|
| 생성 패턴 | 객체 생성과 관련된 패턴 |
| 구조 패턴 | 클래스와 객체의 조합 관련 패턴 |
| 행동 패턴 | 객체 간의 상호작용 및 책임 분배 관련 패턴 |
비유로 설명하기
- 생성 패턴: 요리를 할 때 레시피를 따라 재료를 조합하는 것과 같습니다. 다양한 요리를 만들기 위해 각기 다른 재료를 어떻게 조합할지를 고민합니다.
- 구조 패턴: 건축에서 여러 구조물을 조합해 건물을 만드는 것과 비슷합니다. 각 구성요소가 어떻게 결합되는지를 고려합니다.
- 행동 패턴: 팀 스포츠에서 각 선수의 역할을 정하는 것처럼, 객체 간의 상호작용을 정의합니다.
3. 기본 코드 예제
이번에는 싱글톤 패턴을 통해 디자인 패턴 중 하나를 살펴보겠습니다. 싱글톤 패턴은 클래스의 인스턴스가 오직 하나만 생성되도록 보장합니다.
class Singleton {
static let shared = Singleton()
private init() {
// 초기화 코드
}
func someMethod() {
print("싱글톤 메서드 호출")
}
}
// 사용 예
let singletonInstance = Singleton.shared
singletonInstance.someMethod()
실행 결과:
싱글톤 메서드 호출
class Singleton: 싱글톤 클래스를 정의합니다.static let shared = Singleton(): 클래스의 유일한 인스턴스를 생성합니다.private init(): 초기화 메서드를 private으로 설정하여 외부에서 인스턴스를 생성하지 못하게 합니다.someMethod(): 싱글톤 인스턴스가 호출할 수 있는 메서드를 정의합니다.let singletonInstance = Singleton.shared: 싱글톤 인스턴스를 가져옵니다.singletonInstance.someMethod(): 메서드를 호출합니다.4. 실전 활용 예제
1. 쇼핑몰에서 장바구니 구현
장바구니는 여러 상품을 담고, 결제 시점에 하나의 인스턴스가 필요합니다. 싱글톤 패턴을 적용하여 장바구니를 구현할 수 있습니다.
class Cart {
static let shared = Cart()
private var items: [String] = []
private init() {}
func addItem(_ item: String) {
items.append(item)
}
func showItems() {
print("장바구니 내용: \(items)")
}
}
// 사용 예
let cart = Cart.shared
cart.addItem("사과")
cart.addItem("바나나")
cart.showItems()
2. 네트워크 요청 처리
네트워크 요청을 처리하는 클래스에서도 싱글톤을 사용할 수 있습니다. 모든 네트워크 요청은 동일한 인스턴스를 통해 이루어져야 합니다.
class NetworkManager {
static let shared = NetworkManager()
private init() {}
func fetchData() {
print("데이터 요청")
}
}
// 사용 예
NetworkManager.shared.fetchData()
5. 흔한 실수와 주의사항
1. 싱글톤 인스턴스의 초기화
잘못된 코드:
let instance1 = Singleton()
올바른 코드:
let instance1 = Singleton.shared
주의: 싱글톤 클래스는 private init()을 사용하여 외부에서 인스턴스를 생성하지 못하도록 해야 합니다.
2. 스레드 안전성
잘못된 코드:
class Singleton {
static var shared: Singleton!
}
올바른 코드:
class Singleton {
static let shared = Singleton()
}
주의: static let은 스레드 안전하며, 인스턴스의 초기화가 한 번만 이루어집니다.
6. 정리
다음에 학습하면 좋은 주제: 옵저버 패턴, 팩토리 패턴, 전략 패턴.