JAVA

JAVA 디자인패턴 - 미디에이터(Mediator) 패턴의 정의와 동작 그리고 장단점

TECH 톡마스터 2023. 7. 18.

 

[ 목차 ]

    JAVA 디자인패턴 - 미디에이터(Mediator) 패턴의 정의 동작 장단점
    JAVA 디자인패턴 - 미디에이터(Mediator) 패턴의 정의 동작 장단점

    이 글에서는 자바 디자인 패턴 중 미디에이터(Mediator) 패턴에 대해 알아볼 것입니다. 시작해 볼까요?

    미디에이터 패턴이란?

    먼저 미디에이터 패턴이 무엇인지 알아보도록 하죠. 이 패턴은 객체들 간의 복잡한 관계를 중재자(미디에이터)를 만들어 간소화하는 패턴입니다. 이를 통해 개별 객체들은 직접 서로를 참조하지 않고 중재자를 통해 서로 소통할 수 있게 됩니다.

    어떻게 동작하나요?

    미디에이터 패턴의 동작 방식을 살펴보겠습니다.

    • 객체들은 미디에이터를 등록하며, 미디에이터는 각 객체를 알게 됩니다.
    • 객체들은 서로 직접 참조하지 않고 미디에이터에 요청을 보냅니다.
    • 미디에이터가 해당 요청을 처리하고, 적절한 객체에게 전달합니다. 필요하다면 상태 변경 또는 이벤트 발생 처리를 합니다.

    미디에이터의 구현

    미디에이터 패턴(Mediator Pattern)은 객체 간의 상호 작용을 중재하는 중간 객체인 '미디에이터'를 이용해 각 객체가 직접 참조하지 않고 상호 작용할 수 있도록 하는 디자인 패턴입니다. 이로 인해 객체 간의 결합도가 낮아지고 유지 관리가 쉬워집니다.

    1. Mediator 인터페이스 생성

    public interface Mediator {
        void send(String message, Colleague colleague);
    }

    2. Colleague 클래스 생성

    public abstract class Colleague {
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
    
        public abstract void send(String message);
        public abstract void notify(String message);
    }

    3. ConcreteColleague 클래스 생성

    public class ConcreteColleague extends Colleague {
        public ConcreteColleague(Mediator mediator) {
            super(mediator);
        }
    
        @Override
        public void send(String message) {
            mediator.send(message, this);
        }
    
        @Override
        public void notify(String message) {
            System.out.println("Concrete Colleague received: " + message);
        }
    }

    4. ConcreteMediator 클래스 생성

    import java.util.ArrayList;
    import java.util.List;
    
    public class ConcreteMediator implements Mediator {
        private List<Colleague> colleagues;
    
        public ConcreteMediator() {
            colleagues = new ArrayList<>();
        }
    
        public void addColleague(Colleague colleague) {
            colleagues.add(colleague);
        }
    
        @Override
        public void send(String message, Colleague originator) {
            for (Colleague colleague : colleagues) {
                if (colleague != originator) {
                    colleague.notify(message);
                }
            }
        }
    }

    5. 미디에이터 패턴 사용

    public class Main {
        public static void main(String[] args) {
            ConcreteMediator mediator = new ConcreteMediator();
    
            ConcreteColleague colleague1 = new ConcreteColleague(mediator);
            ConcreteColleague colleague2 = new ConcreteColleague(mediator);
    
            mediator.addColleague(colleague1);
            mediator.addColleague(colleague2);
    
            colleague1.send("Hello, from Colleague1!");
            colleague2.send("Hi, from Colleague2!");
        }
    }

    미디에이터 패턴의 장점

    이제 이 패턴을 사용하는 이유에 대해 알아봅시다.

    • 객체 간의 의존성 감소: 객체들이 직접 참조하지 않음으로써 결합도를 줄이고 코드 수정 시 영향도를 낮춥니다.
    • 유지보수 용이: 관계가 복잡하지 않고 중앙화되어있기 때문에 관련 로직 수정이 편해집니다.
    • 재사용성 향상: 객체들이 느슨한 결합이기에 다른 시스템에서도 쉽게 사용할 수 있게 됩니다.

    미디에이터 패턴의 단점

    패턴의 사용에 있어 주의할 점들도 살펴보죠.

    • 미디에이터 너무 복잡해질 수 있음: 객체 관계를 포괄하는 중재자가 복잡해지면 결국 관리가 어려워질 수 있습니다.
    • 퍼포먼스 저하 위험: 모든 요청이 중앙에서 처리되기 때문에 성능이 저하될 수 있습니다. 최적화를 잘 신경 써야 합니다.

    오늘은 미디에이터(Mediator) 패턴에 대해 알아보았습니다. 이 패턴은 객체들 간의 복잡한 관계를 단순화해 유지보수와 재사용성을 향상시키는데 유용한 패턴이지만, 몇 가지 단점을 잊지 말고 개발해야겠죠? 그럼 즐거운 코딩되세요!

     

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴

     

    JAVA 디자인패턴 - 옵저버(Observer) 패턴

    [ 목차 ] 안녕하세요. 이번에는 Java 디자인패턴 중 옵저버(Observer) 패턴에 대해서 알아보겠습니다. 1. 옵저버(Observer) 패턴이란? 옵저버 패턴은 디자인 패턴 중 하나로, 한 객체의 상태가 변화하면

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

     

    JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 데코레이터(Decorator) 패턴에 대해서 알아보겠습니다. 1. 데코레이터(Decorator) 패턴 이란? 데코레이터 패턴은 기존 객체에 동적으로 새로운 기능을

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴

     

    JAVA 디자인패턴 - 프록시(Proxy) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다. 1. 프록시(Proxy) 패턴 이란? 프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴

     

    JAVA 디자인 패턴 - 커맨드(Command) 패턴

    안녕하세요. 오늘 알아볼 JAVA 디자인 패턴은 커맨드(Command) 패턴입니다. 1. 커맨드(Command) 패턴 이란? 커맨드 패턴은 요청을 객체로 캡슐화하여 메서드 호출에 의한 연동을 개선하고, 호출 정보를

    tech.dj-tiger.com

    2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

     

    JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 스트래티지(Strategy) 패턴에 대해서 작성해 보겠습니다. 스트래티지(Strategy) 패턴 이란? 스트래티지 패턴은 알고리즘 군을 정의한 다음 각각을 캡슐

    tech.dj-tiger.com

    2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

     

    JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

    [ 목차 ] 안녕하세요. JAVA 디자인패턴 중 템플릿 메서드(Template Method) 패턴에 대해서 알아볼까요? 템플릿 메서드(Template Method) 패턴 이란? 템플릿 메서드 패턴은 알고리즘의 골격을 제공하고, 일부

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴

     

    JAVA 디자인패턴 - 컴포지트(Composite) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 컴포지트(Composite) 패턴입니다. 컴포지트(Composite) 패턴 이란? 컴포지트 패턴은 객체들의 조직을 트리 구조로 구성하여 전체-부분 계층을 표

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

     

    JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

    [ 목차 ] 안녕하세요, 프로그래밍 세계의 친구분들! 오늘은 자주 사용되는 자바 디자인 패턴 중 하나인 이터레이터(Iterator) 패턴에 대해 알아볼까요? 디자인 패턴이란 소프트웨어를 설계할 때 반

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

     

    JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

    [ 목차 ] 안녕하세요, 자바 프로그래밍을 사랑하는 여러분! 오늘은 디자인 패턴 중 하나인 비지터(Visitor) 패턴에 대해 자세히 알아볼까요? 디자인 패턴은 우리의 코드를 더 유연하고 효율적으로

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현

     

    JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현

    [ 목차 ] 안녕하세요, 자바 개발자 여러분! 오늘은 자바 디자인 패턴 중 사랑받는 빌더(Builder) 패턴에 관해서 알아보려고 합니다. 이 글을 통해 빌더 패턴의 개념과 사용법에 대해 더 잘 이해하고

    tech.dj-tiger.com

    2023.07.18 - [JAVA] - JAVA 디자인패턴 - 멀티턴(Multiton) 패턴의 정의 장점 구현

     

    댓글

    💲 추천 글