π‘ μ€μ¬μ(Mediator) ν¨ν΄μ΄λ?
κ°μ²΄ κ°μ νΌλμ€λ¬μ΄ μμ‘΄ κ΄κ³λ€μ μ€μΌ μ μλ νλ λμμΈ ν¨ν΄μ λλ€. μ΄ ν¨ν΄μ κ°μ²΄ κ°μ μ§μ ν΅μ μ μ ννκ³ μ€μ¬μ κ°μ²΄λ₯Ό ν΅ν΄μλ§ νλ ₯νλλ‘ ν©λλ€.
μ€μ¬μ ν¨ν΄μ κ° κ°μ²΄λ€μ κ°ν μ°κ²°(μ°Έμ‘°)λ₯Ό λκ³ , κ·Έ λμ μ»΄ν¬λνΈλ€μ΄ νΉμ μ€μ¬μ κ°μ²΄λ₯Ό νΈμΆνμ¬ μ μ ν μ»΄ν¬λνΈλ€λ‘ 리λ€μ΄λ μ νκ²λ ν©λλ€. μ΄λ‘ μΈν΄ μ»΄ν¬λνΈλ€μ κ°μ μ μΌλ‘ νλ ₯νκ² λκ³ , μμ κ°μ λλ£ μ»΄ν¬λνΈλ€κ³Ό κ²°ν©λλ λμ λ¨μΌ μ€μ¬μ ν΄λμ€μλ§ μμ‘΄ν©λλ€.
β μ΅μλ² ν¨ν΄κ³Ό μ€μ¬μ ν¨ν΄?
μ΅μλ² ν¨ν΄μ 1κ°μ λ°νμμ Nκ°μ ꡬλ μκ° μ‘΄μ¬νμ¬ μ΅μλ²κ° λ°νμ λ΄λΉνκ³ μ€μ¬μ ν¨ν΄μ Mκ°μ νΌλΈλ¦¬μ μ Nκ°μ ꡬλ μ μ¬μ΄μμ 1κ°μ μ€μ¬μλ₯Ό ν΅ν΄ ν΅μ ν©λλ€. μ΅μλ² ν¨ν΄μ μ¬μ¬μ©μ±μ μ’μ§λ§ μ€μ¬μ ν¨ν΄μ μ ν리μΌμ΄μ μ λ‘μ§μ λ§μΆμ΄ κ°λ°νκΈ° λλ¬Έμ μ¬μ¬μ©μ΄ μ΄λ ΅μ΅λλ€.
π‘ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μΌλ‘ λ³Έ μ€μ¬μ ν¨ν΄
- Component(Colleague) : Mediatorλ₯Ό μ°Έμ‘°νλ€.
- Mediator Interface : μΌλ°μ μΌλ‘ λ¨μΌ μλ¦Ό λ©μλλ§μ ν¬ν¨νλ©°, Componentλ ν΄λΉ λ©μλμ μΈμλ‘ Contextλ₯Ό μ λ¬νλ€.
- Concrete Mediator : λ€μν μ»΄ν¬λνΈ κ°μ κ΄κ³λ₯Ό μΊ‘μννλ€.
- μ»΄ν¬λνΈλ€μ λ€λ₯Έ μ»΄ν¬λνΈμλ κ΄κ³λ₯Ό λ§Ίμ§ μμΌλ©°, μ€λ‘μ§ μ€μ¬μμλ§ μμ‘΄νλ€.
π‘ μ€μ¬μ ν¨ν΄ ꡬν
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);
/**
* ν΄λΌμ΄μΈνΈ μ½λ
*/
}
}
π‘ λ§λ¬΄λ¦¬
μ€μ¬μ ν¨ν΄μ
- κ°μ²΄λ€ κ°μ μνΈμμ©μ΄ 볡μ‘ν΄μ μλ‘ κ°μ μμ‘΄κ΄κ³κ° ꡬ쑰νλμ΄μμ§ μκ³ μ΄ν΄νκΈ° μ΄λ €μΈ λ
- νλμ κ°μ²΄κ° λ§μ λ€λ₯Έ κ°μ²΄λ€μ μ°Έκ³ νκ³ μμ΄(λ¨λ¨ν κ²°ν©νκ³ μμ΄) μ¬μ¬μ©μ΄ μ΄λ €μΈ λ
- μ¬λ¬ ν΄λμ€μ λΆμ°λμ΄ μλ νμλ₯Ό μ¬κ΅¬μ±ν΄μΌν λ
μ μ¬μ©ν μ μμ΅λλ€.
λ€μν κ°μ²΄ κ°μ μ°κ΄μ ν κ³³μΌλ‘ λͺ¨μ κ΄λ¦¬νκ³ , μ»΄ν¬λνΈ κ°μ²΄λ₯Ό λ³κ²½νμ§ μκ³ λ μλ‘μ΄ μ€μ¬μλ₯Ό λμ ν μ μμΌλ―λ‘ SRPμ OCP μμΉμ μ€μν©λλ€. κ°μ²΄ κ° κ²°ν©λλ₯Ό μ€μ΄κ³ μ¬μ¬μ©μ±μ λ립λλ€. κ·Έλ¬λ Mediator κ°μ²΄ νλκ° λͺ¨λ μ± μμ λ΄λΉνκΈ° λλ¬Έμ κ°μ²΄κ° 볡μ‘ν΄μ Έ μ μ§λ³΄μκ° μ΄λ €μμ§λ€λ λ¨μ μ΄ μμ΅λλ€.