Post

โ›“๏ธ Java Design-Pattern Xโ…ฆ - Mediator

โ›“๏ธ Java Design-Pattern Xโ…ฆ - Mediator

๐Ÿ“— ใ€ŽJAVA ์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธ ํŒจํ„ด : ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” GoF์˜ 23๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ดใ€๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

Mediator ํŒจํ„ด์ด๋ž€?

  • ๊ฐ€๋ น 10๋ช…์ด ๋ชจ์—ฌ ๊ณต๋™ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ ์ข€์ฒ˜๋Ÿผ ๋์ด ๋‚˜์งˆ ์•Š๋Š”๋‹ค.
  • ๋ฉค๋ฒ„๋“ค์ด ์„œ๋กœ ์ง€์‹œํ•˜๋ฉฐ ์ž‘์—…์€ ํ˜ผ๋ž€์„ ๊ฒช๊ณ  ์žˆ๊ณ , ์„œ๋กœ์˜ ์ž‘์—…์— ์ผ์ผ์ด ์ฐธ๊ฒฌํ•ด์„œ ๋ถ„์Ÿ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค.
  • ์ด๋•Œ ์ž…์žฅ์ด ๋‹ค๋ฅธย ์ค‘์žฌ์ž๊ฐ€ ๋“ฑ์žฅํ•ด์„œ ๋ฉค๋ฒ„๊ฐ€ ๋ชจ๋‘ ์ค‘์žฌ์ž์—๊ฒŒ๋งŒ ๋ณด๊ณ ํ•˜๊ณ , ์ค‘์žฌ์ž๋งŒ ๋ฉค๋ฒ„์—๊ฒŒ ์ง€์‹œ๋ฅผ ๋‚ด๋ฆฌ๊ฒŒ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
  • ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํŒจํ„ดํ™”ํ•œ ๊ฒƒ์ดย Mediatorย ํŒจํ„ด์ด๋‹ค.

์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ

  • ๋‹ค์Œ์€ ์ด๋ฆ„๊ณผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜๋Š”ย GUIย ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
  1. ๊ฒŒ์ŠคํŠธ ๋กœ๊ทธ์ธ ๋˜๋Š” ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  2. ๊ฒŒ์ŠคํŠธ ๋กœ๊ทธ์ธ์ผ ๋•Œ๋Š”ย username,ย password๊ฐ€ ๋น„ํ™œ์„ฑํ™” ๋œ๋‹ค.
  3. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์ผ ๋•Œ๋งŒย username๊ณผย password๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  4. username์— ๋ฌธ์ž๊ฐ€ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉดย password๋Š” ๋น„ํ™œ์„ฑํ™” ๋œ๋‹ค.
  5. ๋กœ๊ทธ์ธํ•˜๋ ค๋ฉดย OKย ๋ฒ„ํŠผ, ๊ทธ๋งŒ๋‘๋ ค๋ฉดย CANCELย ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.
  6. username,ย passwordย ๋ชจ๋‘ ๋ฌธ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉดย OKย ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋œ๋‹ค.
  7. CANCELย ๋ฒ„ํŠผ์€ ํ•ญ์ƒ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋‹ค.
  • ์ƒ๊ธฐ ๋กœ์ง์„ ๊ฐ ํด๋ž˜์Šค์— ๋ถ„์‚ฐ์‹œํ‚ค๋ฉด ์ฝ”๋”ฉ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ํž˜๋“ค์–ด์ง„๋‹ค.
  • ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด ์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ํ†ต์ œํ•˜๋Š” ์ƒํ™ฉ์— ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Mediatorย ์ธํ„ฐํŽ˜์ด์Šค

1
2
3
4
public interface Mediator {
	public abstract void createColleagues();    
    public abstract void colleagueChanged();
}
  • ์ค‘์žฌ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • createColleaguesย ๋ฉ”์†Œ๋“œ๋Š” ์ค‘์žฌ์ž๊ฐ€ ๊ด€๋ฆฌํ•  ๋ฉค๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • colleagueChangedย ๋ฉ”์†Œ๋“œ๋Š” ๋ฉค๋ฒ„๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.
  • ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด๋‚˜ ํ…์ŠคํŠธ ํ•„๋“œ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

Colleagueย ์ธํ„ฐํŽ˜์ด์Šค

1
2
3
4
public interface Colleague {
	public abstract void setMediator(Mediator mediator);
    public abstract void setColleagueEnabled(boolean enabled);
}
  • ์ค‘์žฌ์ž์—๊ฒŒ ์ƒ๋‹ด์„ ์˜๋ขฐํ•  ๋ฉค๋ฒ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • setMediatorย ๋ฉ”์†Œ๋“œ๋Š” ์ค‘์žฌ์ž๊ฐ€ ์ž์‹ ์„ ์ค‘์žฌ์ž๋กœ ๊ธฐ์–ตํ•ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ๋กœ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์ด ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ์ค‘์žฌ์ž๋Š” ์ถ”ํ›„ ์ƒ๋‹ด์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • setColleagueEnabledย ๋ฉ”์†Œ๋“œ๋Š” ์ค‘์žฌ์ž๋กœ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๋Š” ์ง€์‹œ์— ํ•ด๋‹นํ•œ๋‹ค.
  • ์ฆ‰ ์ค‘์žฌ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

ColleagueButtonย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.Button;

public class ColleagueButton extends Button implements Colleague {
	private Mediator mediator;
    
    public ColleagueButton(String caption) {
    	super(caption);
    }
    
    @Override
    public void setMediator(Mediator mediator) {
    	this.mediator = mediator;
    }
    
    @Override
    public void setColleagueEnable(boolean enabled) {
    	setEnabled(enabled);
    }
}
  • java.awt.Button์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœย Colleagueย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌย LoginFrameย ํด๋ž˜์Šค์™€ ํ˜‘์กฐํ•˜๋ฉฐ ๋™์ž‘ํ•œ๋‹ค.

ColleagueTextFieldย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class ColleagueTextField extends TextField implements TextListener, Colleague {
	private Mediator mediator;
    
    public ColleagueTextField(String text, int columns) {
    	super(text, columns);
    }
    
    @Override
    public void setMediator(Mediator mediator) {
    	this.mediator = mediator;
    }
	
    @Override
    public void setColleagueEnabled(boolean enabled) {
    	setEnable(enabled);
        setBackground(enabled ? Color.white : Color.lightGray);
    }
    
    @Override
    public void textValueChanged(TextEvent e) {
    	mediator.colleagueChanged();
    }
}
  • java.awt.TextField์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๊ณ ย Colleague,ย java.awt.event.TextListenerย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  • texetValueChangedย ๋ฉ”์†Œ๋“œ๋Š”ย TextListenerย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋กœ, ํ…์ŠคํŠธ ๋‚ด์šฉ์— ๋ณ€๊ฒฝ์ด ์žˆ์œผ๋ฉดย AWTย ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ˜ธ์ถœ๋œ๋‹ค.
  • ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ์ค‘์žฌ์ž์˜ย colleagueChangedย ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค.

ColleagueCheckBoxย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague {
	private Mediator mediator;
    
    public ColleagueCheckbox(String caption, CheckboxGroup group, boolean state) {
    	super(caption, group, state);
    }
    
    @Override
    public void setMediator(Mediator mediator) {
    	this.mediator = mediator;
    }
     
    @Override
    public void setColleagueEnabled(boolean enabled) {
    	setEnabled(enabled);
    }
     
    @Override
    public void itemStateChanged(ItemEvent e) {
    	mediator.colleagueChanged();
    }
}
  • java.awt.Checkboxย ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋‹ค.
  • ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์•„๋‹Œ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ด ํด๋ž˜์Šค๋Š” ๋ผ๋””์˜ค ๋ฒ„ํŠผ์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผย itemStateChangedย ๋ฉ”์†Œ๋“œ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ดย java.awt.event.ItemListenerย ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•œ๋‹ค.

LoginFrameย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends Frame implements ActionListener, Mediator {
	private ColleagueCheckbox checkGuest;
    private ColleagueCheckbox checkLogin;
    private ColleagueTextField textUser;
    private ColleagueTextField textPass;
    private ColleagueButton buttonOk;
    private ColleagueButton buttonCancel;
    
    public LoginFrame(String title) {
    	super(title);
        
        setBackground(Color.lightGray);
        
        setLayout(new GridLayout(4, 2));
        
        createColleagues();
        
        add(checkGuest);
        add(checkLogin);
        add(new Label("Username:"));
        add(textUser);
        add(new Label("Password:"));
        add(textPass);
        add(buttonOk);
        add(buttonCancel);
        
        colleagueChanged();
        
        pack();
        setVisible(true);
    }
    
    @Override
    public void createColleagues() {
    	// checkbox
        CheckboxGroup g = new CheckboxGroup();
        checkGuest = new ColleagueCheckbox("Guest", g, true);
        checkLogin = new ColleagueCheckbox("Login", g, false);
        
        // textField
        textUser = new ColleagueTextField("", 10);
        textPass = new ColleagueTextField("", 10);
        
        textPass.setEchoChar('*');
        
        // button
        buttonOk = new ColleagueButton("OK");
        buttonCancel = new ColleagueButton("Cancel");
        
        // mediator
        checkGuest.setMediator(this);
        checkLogin.setMediator(this);
        textUser.setMediator(this);
        textPass.setMediator(this);
        buttonOk.setMediator(this);
        buttonCancel.setMediator(this);
        
        // listener
        checkGuest.addItemListener(checkGuest);
        checkLogin.addItemListener(checkLogin);
        textUser.addTextListener(textUser);
        textPass.addTextListener(testPass);
        buttonOk.addActionListener(this);
        buttonCancel.addActionListener(this);
    }
    
    @Override
    public void colleagueChanged() {
    	if (checkGuest.getState()) {
        	textUser.setColleagueEnabled(false);
            textPass.setColleagueEnabled(false);
            buttonOk.setColleagueEnabled(true);
        } else {
        	textUser.setColleagueEnabled(true);
            userPassChanged();
        }
    }
    
    private void userPassChanged() {
    	if (textUser.getText().length() > 0) {
        	textPass.setColleagueEnabled(true);
        	if (textPass.getText().length() > 0) {
            	buttonOk.setColleagueEnabled(true);
            } else {
            	buttonOk.setColleagueEnabled(false);
            }
        } else {
        	textPass.setColleagueEnabled(false);
            buttonOk.setColleagueEnabled(false);
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
    	System.out.println(e.toString());
        System.exit(0);
    }
}
  • ์ค‘์žฌ์ž ์—ญํ• ์— ํ•ด๋‹นํ•œ๋‹ค.ย 
  • java.awt.Frame์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๊ณ ย Mediatorย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ์ƒ์„ฑ์ž์—์„œ๋Š” ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ •, ๋ ˆ์ด์•„์›ƒ ์„ค์ •,ย colleagueย ์ƒ์„ฑ ๋ฐ ๋ฐฐ์น˜, ์ดˆ๊ธฐ ์ƒํƒœ ์„ค์ •, ํ‘œ์‹œ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.
  • createColleagueย ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€ํ™”์ƒ์ž์— ํ•„์š”ํ•œย colleague๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„๋“œ์— ์ €์žฅํ•œ๋‹ค.
  • ๋˜ ๊ฐย colleague์— ๋Œ€ํ•ดย setMediator๋ฅผ ํ˜ธ์ถœํ•ด ์ค‘์žฌ์ž์ž„์„ ์•Œ๋ฆฐ๋‹ค.
  • ๋˜ํ•œ ๊ฐย listenerย ์„ค์ •๋„ ์ˆ˜ํ–‰ํ•˜์—ฌย AWTย ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ ์ ˆํ•˜๊ฒŒ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฉ”์†Œ๋“œ๋Š”ย colleagueChangedย ๋ฉ”์†Œ๋“œ์ด๋‹ค.
  • ์ด ๋ฉ”์†Œ๋“œ์—์„œ ํ‘œ์‹œ์˜ ํ™œ์„ฑ/๋น„ํ™œ์„ฑํ™”๋ฅผ ์ ์ ˆํ•œ ์กฐ๊ฑด์— ์ฒ˜๋ฆฌํ•œ๋‹ค.ย 
  • ์ฆ‰, ๋ชจ๋“ ย colleague์˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ย colleagueChangedย ๋ฉ”์†Œ๋“œ๋กœ ์ง‘๊ฒฐ๋œ๋‹ค.

Mainย ํด๋ž˜์Šค

1
2
3
4
5
public class Main {
	static public void main(String[] args) {
    	new LoginFrame("Mediator Sample");
    }
}
  • LoginFrame์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.ย 
  • mainย ๋ฉ”์†Œ๋“œ๊ฐ€ ๋๋‚˜๋”๋ผ๋„ย LoginFrame์˜ ์ธ์Šคํ„ด์Šค๋Š”ย AWTย ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์œ ์ง€๋œ๋‹ค.

Mediatorย ํŒจํ„ด์˜ ๋“ฑ์žฅ์ธ๋ฌผ

Mediatorย ์ธํ„ฐํŽ˜์ด์Šค

  • colleague์™€ ํ†ต์‹ ํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šคย API๋ฅผ ์ •์˜ํ•˜๋Š” ์ค‘์žฌ์žย Mediatorย ์—ญํ• ์„ ํ•œ๋‹ค.

LoginFrameย ํด๋ž˜์Šค

  • ์ค‘์žฌ์ž์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ์‹ค์ œ๋กœ ์กฐ์ •ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ค‘์žฌ์žย CreateMediatorย ์—ญํ• ์„ ํ•œ๋‹ค.

Colleagueย ์ธํ„ฐํŽ˜์ด์Šค

  • ์ค‘์žฌ์ž์™€ ํ†ต์‹ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šคย API๋ฅผ ์ •์˜ํ•˜๋Š” ๋™๋ฃŒย Colleagueย ์—ญํ• ์„ ํ•œ๋‹ค.

ColleagueButton,ย ColleagueTextField,ย ColleagueCheckboxย ํด๋ž˜์Šค

  • ๋™๋ฃŒ ์—ญํ• ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋™๋ฃŒย ConcreteColleagueย ์—ญํ• ์„ ํ•œ๋‹ค.

์ฑ…์—์„œ ์ œ์‹œํ•˜๋Š” ํžŒํŠธ

๋ถ„์‚ฐ์ด ์˜คํžˆ๋ ค ํ™”๋ฅผ ๋ถ€๋ฅผ ๋•Œ

  • ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์˜ย LoginFrameย ํด๋ž˜์Šค์— ์žˆ๋Š”ย colleagueChangedย ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์†Œ ๋ณต์žกํ•˜๋‹ค.
  • ์‚ฌ์–‘์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ฒฐ๊ตญ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธธํ…๋ฐ, ๊ทธ๊ฑด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฐ€๋ น ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ ํ‘œ์‹œ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ์— ๋Œ€ํ•œ ๋กœ์ง์€ ์ด๊ณณ์—๋งŒ ์กด์žฌํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ๋งŒ ๋””๋ฒ„๊น… ๋ฐ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งŒ์•ฝ ๋กœ์ง์ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ต‰์žฅํžˆ ๊ณจ์น˜ ์•„ํ”„๊ฒŒ ๋œ๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ๋Š” ํ•œ ๊ณณ์œผ๋กœ ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ์ฆ‰ ๋ฌธ์ œ๋ฅผ ๋ถ„ํ• ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋ฒˆ ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ ๊ฐ™์€ ๊ฒฝ์šฐ ๊ฐ ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ํ˜„๋ช…ํ•˜์ง€ ์•Š๋‹ค.ย 
  • ๊ฐ ํด๋ž˜์Šค๋กœ ๋ถ„์‚ฐํ•  ๊ฒƒ์€ ๋ถ„์‚ฐํ•˜๊ณ  ์ง‘์ค‘ํ•  ๊ฒƒ์€ ์ง‘์ค‘ํ•˜์ง€ ์•Š์œผ๋ฉด ํด๋ž˜์Šค์˜ ๋ถ„์‚ฐ์ด ์˜คํžˆ๋ ค ํ™”๋ฅผ ๋ถ€๋ฅด๊ฒŒ ๋œ๋‹ค.

ํ†ต์‹  ๊ฒฝ๋กœ์˜ ์ฆ๊ฐ€

  • ์ธ์Šคํ„ด์Šค๊ฐ€ 2๊ฐœ์ผ ๋•Œ๋Š” ํ†ต์‹  ๊ฒฝ๋กœ๊ฐ€ย A -> B,ย B -> A๋กœ 2๊ฐœ, ์ธ์Šคํ„ด์Šค๊ฐ€ 3๊ฐœ์ผ ๋•Œ๋Š” 6๊ฐœ, ์ธ์Šคํ„ด์Šค๊ฐ€ 4๊ฐœ์ผ ๋•Œ๋Š” 12๊ฐœ๋กœ ๋Š˜์–ด๋‚˜๊ณ , ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ์ž…์žฅ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ์„œ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์ง„๋‹ค.
  • ์ธ์Šคํ„ด์Šค ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ์ธ์Šคํ„ด์Šค๋ฅผ ๋Š˜๋ ค๊ฐ€๋‹ค๋ณด๋ฉด ์–ด๋”˜๊ฐ€์—์„œ ๋ฌธ์ œ๊ฐ€ ํ„ฐ์ง€๊ฒŒ ๋œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ํ†ต์‹  ๊ฒฝ๋กœ์˜ ๊ฐ€ํŒŒ๋ฅธ ์ฆ๊ฐ€๋ฅผ ์–ต์ œํ•˜๋Š” ๊ฒƒ์ดย Mediatorย ํŒจํ„ด์ด๋‹ค.

์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?

  • ๊ตฌ์ฒด์ ์ธ ๋™๋ฃŒ ์—ญํ• ์€ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๊ตฌ์ฒด์ ์ธ ์ค‘์žฌ์ž ์—ญํ• ์€ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ ์ƒ์ž์™€๋Š” ๋ณ„๋„์˜ ๋Œ€ํ™”์ƒ์ž๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉดย ColleagueButton,ย ColleagueTextField,ย ColleagueCheckboxย ํด๋ž˜์Šค๋Š” ์ƒˆ๋กœ์šด ๋Œ€ํ™”์ƒ์ž์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ฝ”๋“œ ์ค‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ๋†’์€ ๋ถ€๋ถ„์„ ๊ตฌ์ฒด์ ์ธ ์ค‘์žฌ์ž ์—ญํ• ์ธย LoginFrame์— ๋ชจ๋‘ ๋„ฃ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ๋Œ€ํ™”์ƒ์ž๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

GUIย ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

  • ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ํŒจํ„ด์„ ์„ค๋ช…ํ•  ๋ชฉ์ ์œผ๋กœย AWT๋ฅผ ๋‹ค์†Œ ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•œ ์ ์ด ์žˆ๋‹ค.
  • ๋˜ ์ƒˆ๋กœ์šดย GUIย ํˆดํ‚ท์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ์„ ์ฃผ์˜ํ•˜์ž.
This post is licensed under CC BY 4.0 by the author.