[swift] 구조체와 열거형의 디자인 패턴 적용 방법

구조체와 열거형은 Swift에서 강력한 도구로 다양한 디자인 패턴을 구현하는 데 활용할 수 있습니다. 이번 포스트에서는 구조체와 열거형을 사용하여 싱글턴, 팩토리, 및 옵저버 디자인 패턴을 구현하는 방법에 대해 알아보겠습니다.

1. 싱글턴 디자인 패턴

싱글턴은 애플리케이션에서 단 하나의 인스턴스만을 가지도록 하는 디자인 패턴입니다. 이를 구현하기 위해 구조체로 싱글턴을 구현할 수 있습니다.

struct SingletonManager {
    static let shared = SingletonManager()
    private init() {}
    
    func someMethod() {
        // 메서드 구현
    }
}

위의 코드에서 shared 상수는 유일한 SingletonManager 인스턴스를 나타내며, private init()으로 외부에서 새로운 인스턴스를 생성하는 것을 막습니다.

2. 팩토리 디자인 패턴

팩토리 패턴은 객체 생성을 캡슐화하여, 클라이언트가 생성될 객체의 클래스를 몰라도 되게 하는 디자인 패턴입니다. 열거형을 사용하여 팩토리 메서드를 구현할 수 있습니다.

enum ShapeFactory {
    case circle
    case square
    
    func createShape() -> Shape {
        switch self {
        case .circle: return Circle()
        case .square: return Square()
        }
    }
}

위의 코드에서 ShapeFactory 열거형은 createShape 메서드로 다양한 도형을 생성할 수 있습니다.

3. 옵저버 디자인 패턴

옵저버 패턴은 객체 간의 일대다 의존 관계를 정의하여, 어떤 객체의 상태가 변할 때 그 객체에 의존하는 다른 객체들이 자동으로 알림을 받을 수 있는 디자인 패턴입니다. 열거형을 사용하여 옵저버 리스너를 정의할 수 있습니다.

protocol Observer {
    func notify()
}

enum NotificationCenter {
    static var observers = [Observer]()
    
    static func addObserver(_ observer: Observer) {
        observers.append(observer)
    }
    
    static func postNotification() {
        for observer in observers {
            observer.notify()
        }
    }
}

위의 코드에서 NotificationCenter 열거형은 옵저버를 추가하고 알림을 보내는 기능을 제공합니다.

구조체와 열거형을 활용하여 싱글턴, 팩토리, 및 옵저버 디자인 패턴을 구현하는 방법에 대해 알아보았습니다. 이러한 디자인 패턴을 적절히 활용하면 코드의 유연성과 확장성을 향상시킬 수 있습니다.