6_oHji
6_oHji
ν™˜μ˜ν•©λ‹ˆλ‹€☺
GitHub   Gmail
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (62)
    • πŸ’‘ DEEP DIVE (17)
      • PATTERN (17)
    • πŸ“ 끄적끄적 (4)
    • 🌈 EXPERIENCE (3)
    • πŸ’» PROJECT (3)
    • πŸ“’ STUDY (34)
      • ALGORITHM (1)
      • JAVA (5)
      • FRONT-END (7)
      • BACK-END (10)
      • SPRING (7)
      • NETWORK (3)
      • CLOUD (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • μŠ€ν† λ¦¬
  • 포럼
  • 둜그인
hELLO Β· Designed By μ •μƒμš°.
6_oHji
6_oHji
Deep Dive Into Design Patterns - μ€‘μž¬μž νŒ¨ν„΄
πŸ’‘ DEEP DIVE/PATTERN

Deep Dive Into Design Patterns - μ€‘μž¬μž νŒ¨ν„΄

2024. 4. 16. 00:41

πŸ’‘ μ€‘μž¬μž(Mediator) νŒ¨ν„΄μ΄λž€?

객체 κ°„μ˜ ν˜Όλž€μŠ€λŸ¬μš΄ 의쑴 관계듀을 쀄일 수 μžˆλŠ” 행동 λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄μ€ 객체 κ°„μ˜ 직접 톡신을 μ œν•œν•˜κ³  μ€‘μž¬μž 객체λ₯Ό ν†΅ν•΄μ„œλ§Œ ν˜‘λ ₯ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

 

μ€‘μž¬μž νŒ¨ν„΄μ€ 각 κ°μ²΄λ“€μ˜ κ°•ν•œ μ—°κ²°(μ°Έμ‘°)λ₯Ό 끊고, κ·Έ λŒ€μ‹  μ»΄ν¬λ„ŒνŠΈλ“€μ΄ 특수 μ€‘μž¬μž 객체λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ μ ˆν•œ μ»΄ν¬λ„ŒνŠΈλ“€λ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜ν•˜κ²Œλ” ν•©λ‹ˆλ‹€. 이둜 인해 μ»΄ν¬λ„ŒνŠΈλ“€μ€ κ°„μ ‘μ μœΌλ‘œ ν˜‘λ ₯ν•˜κ²Œ 되고, μˆ˜μ‹­ 개의 λ™λ£Œ μ»΄ν¬λ„ŒνŠΈλ“€κ³Ό κ²°ν•©λ˜λŠ” λŒ€μ‹  단일 μ€‘μž¬μž ν΄λž˜μŠ€μ—λ§Œ μ˜μ‘΄ν•©λ‹ˆλ‹€.

 

⭐ μ˜΅μ„œλ²„ νŒ¨ν„΄κ³Ό μ€‘μž¬μž νŒ¨ν„΄?

μ˜΅μ„œλ²„ νŒ¨ν„΄μ€ 1개의 λ°œν–‰μžμ— N개의 κ΅¬λ…μžκ°€ μ‘΄μž¬ν•˜μ—¬ μ˜΅μ„œλ²„κ°€ λ°œν–‰μ„ λ‹΄λ‹Ήν•˜κ³  μ€‘μž¬μž νŒ¨ν„΄μ€ M개의 퍼블리셔와 N개의 κ΅¬λ…μž μ‚¬μ΄μ—μ„œ 1개의 μ€‘μž¬μžλ₯Ό 톡해 ν†΅μ‹ ν•©λ‹ˆλ‹€. μ˜΅μ„œλ²„ νŒ¨ν„΄μ€ μž¬μ‚¬μš©μ„±μ€ μ’‹μ§€λ§Œ μ€‘μž¬μž νŒ¨ν„΄μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‘œμ§μ— λ§žμΆ”μ–΄ κ°œλ°œν•˜κΈ° λ•Œλ¬Έμ— μž¬μ‚¬μš©μ΄ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

 

 

πŸ’‘ 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μœΌλ‘œ λ³Έ μ€‘μž¬μž νŒ¨ν„΄

  1. Component(Colleague) : Mediatorλ₯Ό μ°Έμ‘°ν•œλ‹€.
  2. Mediator Interface : 일반적으둜 단일 μ•Œλ¦Ό λ©”μ„œλ“œλ§Œμ„ ν¬ν•¨ν•˜λ©°, ComponentλŠ” ν•΄λ‹Ή λ©”μ„œλ“œμ˜ 인수둜 Contextλ₯Ό μ „λ‹¬ν•œλ‹€.
  3. Concrete Mediator : λ‹€μ–‘ν•œ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 관계λ₯Ό μΊ‘μŠν™”ν•œλ‹€.
  4. μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ™€λŠ” 관계λ₯Ό λ§Ίμ§€ μ•ŠμœΌλ©°, μ˜€λ‘œμ§€ μ€‘μž¬μžμ—λ§Œ μ˜μ‘΄ν•œλ‹€.

 

πŸ’‘ μ€‘μž¬μž νŒ¨ν„΄ κ΅¬ν˜„

interface Mediator {
    void notify(Component sender);
}

class ConcreteMediator implements Mediator {
	// Component 객체 참쑰
    private Component component;
    
    /**
    * μƒν˜Έμž‘μš©μ— ν•„μš”ν•œ interface μ •μ˜
    */
}

class Component {
    private Mediator mediator;
    
    /**
    * λ©”μ„œλ“œ
    */
}
public class Client {
    public static void main(String[] args) {

        // λ°œν–‰μž 등둝
        Mediator mediator = new Mediator();

        // μ»΄ν¬λ„ŒνŠΈ 객체에 Mediator 객체 μ§€μ •
        Component component;
        component.setMediator(mediator);

        /**
        * ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ
        */
    }
}

 

πŸ’‘ 마무리

μ€‘μž¬μž νŒ¨ν„΄μ€

  1. 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ΄ λ³΅μž‘ν•΄μ„œ μ„œλ‘œ κ°„μ˜ μ˜μ‘΄κ΄€κ³„κ°€ κ΅¬μ‘°ν™”λ˜μ–΄μžˆμ§€ μ•Šκ³  μ΄ν•΄ν•˜κΈ° μ–΄λ €μšΈ λ•Œ
  2. ν•˜λ‚˜μ˜ 객체가 λ§Žμ€ λ‹€λ₯Έ 객체듀을 μ°Έκ³ ν•˜κ³  μžˆμ–΄(λ‹¨λ‹¨νžˆ κ²°ν•©ν•˜κ³  μžˆμ–΄) μž¬μ‚¬μš©μ΄ μ–΄λ €μšΈ λ•Œ
  3. μ—¬λŸ¬ ν΄λž˜μŠ€μ— λΆ„μ‚°λ˜μ–΄ μžˆλŠ” ν–‰μœ„λ₯Ό μž¬κ΅¬μ„±ν•΄μ•Όν•  λ•Œ

에 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ‹€μ–‘ν•œ 객체 κ°„μ˜ 연관을 ν•œ 곳으둜 λͺ¨μ•„ κ΄€λ¦¬ν•˜κ³ , μ»΄ν¬λ„ŒνŠΈ 객체λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ μƒˆλ‘œμš΄ μ€‘μž¬μžλ₯Ό λ„μž…ν•  수 μžˆμœΌλ―€λ‘œ SRP와 OCP 원칙을 μ€€μˆ˜ν•©λ‹ˆλ‹€. 객체 κ°„ 결합도λ₯Ό 쀄이고 μž¬μ‚¬μš©μ„±μ„ λŠ˜λ¦½λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Mediator 객체 ν•˜λ‚˜κ°€ λͺ¨λ‘ μ±…μž„μ„ λ‹΄λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— 객체가 λ³΅μž‘ν•΄μ Έ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§„λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ€‘μž¬μž νŒ¨ν„΄

/ λ””μžμΈ νŒ¨ν„΄λ“€ / 행동 νŒ¨ν„΄ μ€‘μž¬μž νŒ¨ν„΄ λ‹€μŒ μ΄λ¦„μœΌλ‘œλ„ λΆˆλ¦½λ‹ˆλ‹€: μ€‘κ°œμΈ, μ»¨νŠΈλ‘€λŸ¬, Mediator μ˜λ„ μ€‘μž¬μžλŠ” 객체 κ°„μ˜ ν˜Όλž€μŠ€λŸ¬μš΄ 의쑴 관계듀을 쀄일 수 μžˆλŠ” 행동 λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. 이

refactoring.guru

 

[Design Pattern] μ€‘μž¬μž νŒ¨ν„΄(Mediator Pattern)

μ€‘μž¬μž νŒ¨ν„΄(Mediator Pattern)은 κ°μ²΄κ°„μ˜ μƒν˜Έμž‘μš©μ„ μΊ‘μŠν™”ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ 싀행쀑 ν–‰μœ„λ₯Ό λ°”κΎΈλŠ” λ°©λ²•μœΌλ‘œ Behavior Pattern에 μ†ν•˜κ²Œλ©λ‹ˆλ‹€. 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν”„λ‘œκ·Έλž¨μ€

velog.io

 

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ’‘ DEEP DIVE/PATTERN' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • Deep Dive Into Design Patterns - μ±…μž„ 연쇄 νŒ¨ν„΄
    • Deep Dive Into Design Patterns - ν”„λ‘μ‹œ νŒ¨ν„΄
    • Deep Dive Into Design Patterns - μ˜΅μ„œλ²„ νŒ¨ν„΄
    • Deep Dive Into Design Patterns - 싱글톀 νŒ¨ν„΄
    6_oHji
    6_oHji
    끄적끄적

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”