본문 바로가기
Swift

Swift에서 데코레이터 패턴(Decorator Pattern)의 개념과 예제

by mr.conan 2023. 6. 15.
728x90
반응형

데코레이터 패턴(Decorator Pattern)은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나입니다. Swift에서도 데코레이터 패턴을 활용하여 객체에 동적으로 기능을 추가하거나 수정할 수 있습니다. 이 블로그 포스트에서는 데코레이터 패턴의 개념을 소개하고, Swift로 구현된 예제를 통해 데코레이터 패턴의 사용법을 알아보겠습니다.

데코레이터 패턴의 개념: 데코레이터 패턴은 기존 객체의 동작을 수정하지 않고, 추가 기능을 런타임에 동적으로 부여할 수 있는 패턴입니다. 이 패턴은 객체의 확장성을 높이고, 객체 간의 결합도를 낮추면서도 새로운 기능을 추가할 수 있습니다. 데코레이터 패턴은 객체를 감싸는 래퍼(Wrapper) 클래스를 사용하여 기능을 추가합니다.

데코레이터 패턴 예제:

protocol Component {
    func operation() -> String
}

class ConcreteComponent: Component {
    func operation() -> String {
        return "ConcreteComponent"
    }
}

class Decorator: Component {
    private let component: Component

    init(component: Component) {
        self.component = component
    }

    func operation() -> String {
        return component.operation()
    }
}

class ConcreteDecoratorA: Decorator {
    override func operation() -> String {
        return "ConcreteDecoratorA, " + super.operation()
    }
}

class ConcreteDecoratorB: Decorator {
    override func operation() -> String {
        return "ConcreteDecoratorB, " + super.operation()
    }
}

위의 예제에서는 Component 프로토콜을 정의하고, ConcreteComponent 클래스가 이를 구현합니다. Decorator 클래스는 Component를 상속받아 래퍼 역할을 수행하며, 기능을 추가하거나 수정할 수 있습니다. ConcreteDecoratorA와 ConcreteDecoratorB는 실제로 기능을 추가하는 구체적인 데코레이터 클래스입니다.

사용 예시:

let component = ConcreteComponent()

let decoratedComponentA = ConcreteDecoratorA(component: component)
let decoratedComponentB = ConcreteDecoratorB(component: decoratedComponentA)

print(decoratedComponentB.operation())

위의 예시에서는 ConcreteComponent 인스턴스를 생성하고, ConcreteDecoratorAConcreteDecoratorB로 데코레이터를 추가하여 기능을 런타임에 동적으로 확장합니다. operation() 메서드를 호출하여 결과를 출력합니다.

728x90
반응형