소프트웨어 개발에서 디자인 패턴은 문제를 해결하기 위한 일반적인 접근 방식을 제공합니다. 다양한 패턴 중에서도 미디에이터 패턴은 객체 간의 상호작용을 단순화하고, 객체들 간의 의존성을 줄이는 데 유용합니다. 이 글에서는 루비에서 미디에이터 패턴을 구현하는 방법을 알아보겠습니다.
미디에이터 패턴은 객체 간의 통신을 관리하는 중재자(mediator) 역할을 하는 객체를 도입하여, 객체들이 직접적으로 서로와 상호작용하지 않도록 하는 패턴입니다. 이를 통해 객체 간의 결합도를 낮추고, 시스템의 유지보수성을 높일 수 있습니다.
미디에이터 패턴은 주로 네 가지 주요 구성 요소로 이루어져 있습니다:
이제 루비에서 미디에이터 패턴을 구현해 보겠습니다. 간단한 채팅 애플리케이션을 예로 들어, 사용자 간의 메시지 전송을 미디에이터를 통해 관리하는 구조를 만들어 보겠습니다.
먼저, 미디에이터 인터페이스를 정의합니다. 이 인터페이스는 동료 객체가 미디에이터를 통해 메시지를 전송하고 수신할 수 있도록 메서드를 선언합니다.
class Mediator def send_message(message, colleague) raise NotImplementedError, 'This method should be overridden' end end
이제 구체적인 미디에이터 클래스를 구현합니다. 이 클래스는 여러 동료 객체를 관리하고, 메시지를 전달하는 역할을 합니다.
class ChatMediator < Mediator def initialize @colleagues = [] end def add_colleague(colleague) @colleagues << colleague colleague.mediator = self end def send_message(message, colleague) @colleagues.each do |c| if c != colleague c.receive_message(message) end end end end
동료 객체가 미디에이터와 상호작용할 수 있도록 동료 인터페이스를 정의합니다.
class Colleague attr_accessor :mediator def send_message(message) mediator.send_message(message, self) end def receive_message(message) raise NotImplementedError, 'This method should be overridden' end end
이제 구체적인 동료 클래스를 구현합니다. 각 동료는 메시지를 전송하고 수신하는 기능을 가지게 됩니다.
class User < Colleague attr_reader :name def initialize(name) @name = name end def receive_message(message) puts "#{name} received: #{message}" end end
위에서 설명한 모든 클래스를 통합하여 전체 코드를 보여드리겠습니다.
class Mediator def send_message(message, colleague) raise NotImplementedError, 'This method should be overridden' end end class ChatMediator < Mediator def initialize @colleagues = [] end def add_colleague(colleague) @colleagues << colleague colleague.mediator = self end def send_message(message, colleague) @colleagues.each do |c| if c != colleague c.receive_message(message) end end end end class Colleague attr_accessor :mediator def send_message(message) mediator.send_message(message, self) end def receive_message(message) raise NotImplementedError, 'This method should be overridden' end end class User < Colleague attr_reader :name def initialize(name) @name = name end def receive_message(message) puts "#{name} received: #{message}" end end # 사용 예제 mediator = ChatMediator.new user1 = User.new('Alice') user2 = User.new('Bob') user3 = User.new('Charlie') mediator.add_colleague(user1) mediator.add_colleague(user2) mediator.add_colleague(user3) user1.send_message('Hello, everyone!') user2.send_message('Hi, Alice!')
위의 코드는 간단한 채팅 애플리케이션을 구현한 예제입니다. 각 사용자(User) 객체는 미디에이터(ChatMediator)를 통해 메시지를 전송합니다. 사용자가 메시지를 보낼 때, 미디에이터는 해당 메시지를 다른 모든 사용자에게 전달합니다. 이 구조 덕분에 사용자 객체들은 서로 직접적으로 연결되지 않고, 미디에이터를 통해 간접적으로 상호작용하게 됩니다.
미디에이터 패턴은 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어:
미디에이터 패턴은 객체 간의 의존성을 줄이고, 상호작용을 중앙 집중화하는 데 큰 도움이 됩니다. 루비에서의 구현을 통해 이 패턴의 구조와 동작 방식을 이해할 수 있었습니다. 실제 프로젝트에서도 이 패턴을 활용하여 코드의 가독성과 유지보수성을 향상시키는 것을 고려해 보시기 바랍니다.
```© 2024 RailsInsights. All rights reserved.