기출문제/정보처리기사

2021년 2회 정보처리기사 기출문제 6번

엉클지니 2025. 3. 20. 17:39

6. GoF (Gangs of Four) 디자인 패턴에 대한 설명으로 틀린 것은?

factory method pattern은 상위클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위클래스에서 인스턴스를 생성하도록 하는 방식이다.

prototype patternprototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다.

 bridge pattern은 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다.

mediator pattern은 객체간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향의 목표를 달성하게 해준다.

 

이 문제는 GoF (Gang of Four) 디자인 패턴에 대한 설명 중에서 틀린 설명을 찾아내는 문제입니다. GoF 디자인 패턴은 객체지향 설계에서 자주 사용되는 패턴을 정의한 책 **"Design Patterns: Elements of Reusable Object-Oriented Software"**에서 소개된 23개의 디자인 패턴을 의미합니다.

각각의 선택지를 살펴보며 어떤 설명이 틀린지 분석해보겠습니다.

문제 분석

  1. ① factory method pattern은 상위클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위클래스에서 인스턴스를 생성하도록 하는 방식이다.
    • 맞습니다.
    • Factory Method 패턴은 객체 생성의 인터페이스를 정의하고, 어떤 클래스에서 인스턴스를 만들지를 하위 클래스에 맡기는 방식입니다. 즉, 객체 생성에 대한 구체적인 결정은 서브클래스에서 하게 되어, 객체 생성 방법을 유연하게 만들 수 있습니다.
  2. ② prototype pattern은 prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다.
    • 맞습니다.
    • Prototype 패턴은 객체를 최초로 생성한 후, 이를 복제(clone)하여 새로운 객체를 생성하는 방식입니다. 객체를 직접 생성하는 대신, 기존의 객체를 복제하는 방식으로 성능을 향상시키거나, 객체 생성에 필요한 비용을 줄이는 데 유용합니다.
  3. ❸ bridge pattern은 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다.
    • 틀립니다.
    • Bridge 패턴은 추상화(abstraction)와 구현(implementation)을 분리하여 독립적으로 확장할 수 있게 만드는 구조입니다. 즉, 추상화와 구현을 서로 독립적으로 변경할 수 있도록 중간에서 연결 역할을 하는 패턴입니다. 하지만, "기존 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 맞춰준다"는 설명은 Bridge 패턴의 본질과 맞지 않습니다.
    • Bridge 패턴의 핵심은 추상화와 구현을 별도의 클래스 계층으로 분리하여 둘을 독립적으로 확장할 수 있게 하는 것입니다.
  4. ④ mediator pattern은 객체간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향의 목표를 달성하게 해준다.
    • 맞습니다.
    • Mediator 패턴은 객체들 간의 상호작용을 중재하는 중재자(Mediator) 객체를 도입하여, 객체들 간의 직접적인 상호작용을 방지하고, 중재자가 모든 상호작용을 처리하도록 하는 패턴입니다. 이를 통해 객체들이 서로 간섭하지 않고 독립적으로 동작할 수 있습니다.

결론

  • 틀린 설명은 ❸ Bridge 패턴에 대한 설명입니다.
  • Bridge 패턴은 추상화와 구현을 분리하여 독립적으로 확장할 수 있게 하는 패턴이며, 기존 클래스의 재사용과는 다릅니다. 따라서 이 정답입니다.

Bridge 패턴 간단한 설명

Bridge 패턴을 예시로 설명하면, 두 개의 클래스 계층이 있다고 가정해봅시다: **추상화(Abstraction)**와 **구현(Implementation)**입니다. 이 두 계층을 독립적으로 확장할 수 있도록 Bridge 역할을 하는 클래스를 도입하는 것입니다.

# 추상화 클래스
class RemoteControl:
    def __init__(self, device):
        self.device = device

    def turn_on(self):
        self.device.turn_on()

    def turn_off(self):
        self.device.turn_off()

# 구현 클래스
class TV:
    def turn_on(self):
        print("TV가 켜졌습니다.")

    def turn_off(self):
        print("TV가 꺼졌습니다.")

# 사용 예
tv = TV()
remote = RemoteControl(tv)
remote.turn_on()  # TV가 켜졌습니다.
remote.turn_off()  # TV가 꺼졌습니다.

위 예시에서 RemoteControl은 추상화 계층이고, TV는 구현 계층입니다. RemoteControl은 TV와 관계를 맺고 있지만, 추상화 계층과 구현 계층은 서로 독립적입니다. 이는 Bridge 패턴이 추상화와 구현을 분리하여 독립적으로 확장할 수 있게 하는 방식입니다.

이해가 되셨나요? 추가적으로 궁금한 점이 있으면 언제든지 질문해주세요!

반응형