[swift] 스위프트 투칸의 행동 패턴

스위프트는 현대적이고 강력한 프로그래밍 언어로, 다양한 행동 패턴을 지원합니다. 이러한 행동 패턴은 코드의 구조와 유연성을 개선하며, 재사용 가능한 솔루션을 제공합니다. 이번 블로그 포스트에서는 스위프트 투칸의 몇 가지 흔히 사용되는 행동 패턴을 살펴보겠습니다.

1. 싱글톤 패턴

싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴입니다. 이는 전역 접근이 필요한 객체에 유용합니다. 스위프트에서는 static let 키워드를 사용하여 싱글톤 객체를 구현할 수 있습니다. 예를 들어, 다음과 같이 Singleton 클래스를 구현할 수 있습니다.

class Singleton {
    static let shared = Singleton()
    
    private init() { }
    
    // 싱글톤 객체의 기능 구현
}

위의 코드에서 shared 변수는 Singleton 클래스의 유일한 인스턴스를 참조합니다. private init() 메서드는 외부에서의 객체 생성을 제한하여 단일 인스턴스만을 사용할 수 있도록 합니다.

2. 옵저버 패턴

옵저버 패턴은 객체 사이의 일대다 종속성을 정의하는 패턴입니다. 한 객체의 상태 변화에 따라 다른 객체들에게 알릴 수 있습니다. 스위프트에서 옵저버 패턴을 구현하는 가장 간단한 방법은 NotificationCenter를 사용하는 것입니다. 예를 들어, 다음과 같이 옵저버를 등록하고 알림을 보내는 코드를 작성할 수 있습니다.

// 옵저버 등록
NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: NSNotification.Name("ExampleNotification"), object: nil)

// 알림 보내기
NotificationCenter.default.post(name: NSNotification.Name("ExampleNotification"), object: nil)

// 옵저버 핸들러
@objc func handleNotification(_ notification: Notification) {
    // 알림 처리
}

위의 코드에서 NotificationCenter.default.addObserver 메서드를 사용하여 옵저버를 등록하고, NotificationCenter.default.post 메서드를 사용하여 알림을 보냅니다. 옵저버 핸들러는 @objc 키워드로 선언되어야 합니다.

3. 빌더 패턴

빌더 패턴은 복잡한 객체를 생성하는 과정을 단순화하는 패턴입니다. 스위프트에서는 Builder 프로토콜을 사용하여 빌더 패턴을 구현할 수 있습니다. 예를 들어, 다음과 같이 Builder 프로토콜을 정의하고 채택하는 클래스를 작성할 수 있습니다.

protocol Builder {
    func buildPartA()
    func buildPartB()
    func getResult() -> Product
}

class ConcreteBuilder: Builder {
    private var product = Product()
    
    func buildPartA() {
        // Part A 생성
    }
    
    func buildPartB() {
        // Part B 생성
    }
    
    func getResult() -> Product {
        return product
    }
}

class Product {
    // 빌더로 생성되는 복잡한 객체
}

위의 코드에서 ConcreteBuilder 클래스는 Builder 프로토콜을 채택하여 buildPartA(), buildPartB(), getResult() 메서드를 구현합니다. 이를 통해 복잡한 객체를 구성할 수 있습니다.

결론

스위프트는 다양한 행동 패턴을 간편하게 구현할 수 있는 강력한 언어입니다. 이번 블로그 포스트에서는 싱글톤 패턴, 옵저버 패턴, 빌더 패턴의 스위프트 구현에 대해 알아보았습니다. 이러한 행동 패턴을 적절하게 사용하면 코드의 재사용성을 높이고 유연하게 구조를 설계할 수 있습니다.


참고문헌: