[Design Pattern] ์ต์ ๋ฒ ํจํด(Observer Pattern) ์ด์ผ๊ธฐ #2 (์์ ํฌํจ)
์ง๋ ํฌ์คํ
์์ ์ต์ ๋ฒ ํจํด(Observer Pattern)์ ๋ํด ์ค๋ช
ํ์์ต๋๋ค.
[Design Pattern] ์ต์ ๋ฒ ํจํด(Observer Pattern) ์ด์ผ๊ธฐ (์์ ํฌํจ)
[Design Pattern] ์ต์ ๋ฒ ํจํด(Observer Pattern) ์ด์ผ๊ธฐ #1 (์์ ํฌํจ)
์ต์ ๋ฒ ํจํด(Observer Pattern) ์ต์ ๋ฒ ํจํด์ ๊ด์ฐฐ์ ํจํด์ด๋ผ๊ณ ๋ ํฉ๋๋ค. ์ผ๋๋ค ๊ด๊ณ๋ฅผ ์ด๋ฃจ๊ณ ์์ผ๋ฉฐ, ์ํ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ๋ชจ๋ ์ต์ ๋ฒ๋ค์๊ฒ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ข ๋ ์ดํดํ..
luckygg.tistory.com
๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด, ์ฃผ์ ์(Subject)์ ๊ตฌ๋ ์(Observer)๊ฐ ๋ฑ๋ก(Register)๋์ด ๋ชจ๋ ๊ตฌ๋ ์๊ฐ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ(Notify)๋ฐ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฃผ ์ฌ์ด ์ฝ์ ๊ธฐ๋ฐ์ ์์ ์ฝ๋๋ฅผ ์๊ฐํ์๋๋ฐ์. ์ด๋ฒ ํฌ์คํ ์์๋ ์ข ๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ์น์ํ ์ํผ(WinForm) ๊ธฐ๋ฐ์ ์ํ ์ฝ๋๋ฅผ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
WinForm ๊ธฐ๋ฐ์ Observer Pattern ์์
์๊ฐํด๋๋ฆด ์์ ์ฝ๋์ ๊ตฌ์กฐ๋ ์๋ UML๊ณผ ๊ฐ์ต๋๋ค. Subject interface๋ฅผ MainForm class๊ฐ ์์๋ฐ์ ํจ์๋ฅผ ๊ตฌํํ๊ณ , Observer interface๋ฅผ SubForm class๊ฐ ์์๋ฐ์ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ MainForm์ Textbox์ ์ซ์๋ฅผ ์ ๋ ฅํ๊ณ Enterํค๋ฅผ ๋๋ฅด๋ฉด, ์ด ์ซ์๊ฐ ๋ชจ๋ SubForm์ ๊ฐฑ์ ํ๋๋ก ๊ตฌํ๋์ด ์์ต๋๋ค.

์ต์ ๋ฒ ํจํด์ ๋์ผํ ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ๋ ๋ ์ ์ฉํ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. ์ง๋ ํฌ์คํ ์์๋ YouTube๋ ์ ๋ฌธ์ฌ์ ๊ฐ์ ์์๋ฅผ ๋ค์๋๋ฐ์. ์ด๋ฒ์๋ ๋น์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ฐ๊ด ์ง์ด ์์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์นด๋ฉ๋ผ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ๋ฌ Form์์ ์ ๊ทผํด์ผ ํ ๋ ์ต์ ๋ฒ ํจํด์ ์ฌ์ฉํ๋ฉด, ๋ชจ๋ Form์์ ํญ์ ํ์ฌ ๊ฐ์ ์ ๋ฐ์ดํธ๋ฐ์ ์ ์์ต๋๋ค. ๋ง์ฝ, ์ด๋ฌํ ๋์์ธ ํจํด์ ์ ์ฉํ์ง ์๋๋ค๋ฉด ํน์ ์ด๋ฒคํธ ๋ฐ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํญ์ ํ์ธํ๋๋ก ๊ตฌํํด์ผ๊ฒ ์ฃ ? (์ฌ์ค ์ ์์๋ MVC ํจํด์ด ๋ ์ ํฉํ๊ธด ํฉ๋๋ค. MVC ํจํด์ ์ถํ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.)
์๋ ๊ทธ๋ฆผ์ ์์ ์ฝ๋๋ฅผ ๋์์ํจ ๊ฒฐ๊ณผ์ ๋๋ค.

์ฝ๋ ์ค๋ช
Subject์ Observer interface๋ ์๋์ ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค.
public interface Subject { void registerObserver(Observer o); void removeObserver(Observer o); void notifyObservers(); } public interface Observer { void update(int value); }
Observer interface๋ฅผ ์์๋ฐ๋ SubForm1, 2๋ ์๋์ ๊ฐ์ด ๊ตฌํ๋์ด ์์ต๋๋ค. ์์ฑ์์์ Subject์ registerObserver๋ฅผ ํธ์ถํ์ฌ ์๊ธฐ ์์ ์ ๋ฑ๋กํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ update๊ฐ ํธ์ถ๋๋ฉด TextBox์ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
public partial class SubForm1 : Form, Observer { Subject _subject; public SubForm1(Subject subject) { _subject = subject; subject.registerObserver(this); InitializeComponent(); } public SubForm1() { InitializeComponent(); } public void update(int value) { textBoxValue.Text = value.ToString(); } }
๋ง์ง๋ง์ผ๋ก Subject interface๋ฅผ ์์๋ฐ์ MainForm์๋ ์๋์ ๊ฐ์ด ๊ตฌํํฉ๋๋ค. ์ต์ ๋ฒ ๋ชฉ๋ก์ ArrayList๋ก ๊ด๋ฆฌํ๋ฉฐ, Subject interface์ ์ ์๋ ํจ์๋ค์ ๊ตฌํํฉ๋๋ค. ๋ํ, TextBox์ KeyDown ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ ๋ฐ์ ๋ชจ๋ ์ต์ ๋ฒ๋ค์๊ฒ ์๋ ค์ค๋๋ค.
public partial class MainForm : Form, Subject { SubForm1 _subForm1 = null; SubForm2 _subForm2 = null; IList _observers = new ArrayList(); public MainForm() { InitializeComponent(); _subForm1 = new SubForm1(this); _subForm1.TopLevel = false; _subForm1.FormBorderStyle = FormBorderStyle.None; _subForm1.Dock = DockStyle.Fill; panelTab1.Controls.Add(_subForm1); _subForm1.Show(); _subForm2 = new SubForm2(this); _subForm2.TopLevel = false; _subForm2.FormBorderStyle = FormBorderStyle.None; _subForm2.Dock = DockStyle.Fill; panelTab2.Controls.Add(_subForm2); _subForm2.Show(); } public void notifyObservers() { foreach (Observer o in _observers) o.update(Convert.ToInt32(textBoxValue.Text)); } public void registerObserver(Observer o) { _observers.Add(o); } public void removeObserver(Observer o) { _observers.Remove(o); } private void TextBoxValue_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { int value = Convert.ToInt32(textBoxValue.Text); notifyObservers(); } } }
์์ธํ ๋ด์ฉ์ ์๋ ์ฒจ๋ถ๋ ์์ ์ฝ๋๋ฅผ ํ์ธํด์ฃผ์ธ์.
'Programming > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Design Pattern] ๋์์ธ ํจํด ์๊ฐ (์ถ์ฒ ๋์ ํฌํจ)
[Design Pattern] ๋์์ธ ํจํด ์๊ฐ (์ถ์ฒ ๋์ ํฌํจ)
2019.10.06 -
[Design Pattern] MVC(Model-View-Controller) ํจํด ์ด์ผ๊ธฐ #2 (์์ ํฌํจ)
[Design Pattern] MVC(Model-View-Controller) ํจํด ์ด์ผ๊ธฐ #2 (์์ ํฌํจ)
2019.10.01 -
[Design Pattern] MVC(Model-View-Controller) ํจํด ์ด์ผ๊ธฐ #1
[Design Pattern] MVC(Model-View-Controller) ํจํด ์ด์ผ๊ธฐ #1
2019.09.27 -
[Design Pattern] ์ต์ ๋ฒ ํจํด(Observer Pattern) ์ด์ผ๊ธฐ #1 (์์ ํฌํจ)
[Design Pattern] ์ต์ ๋ฒ ํจํด(Observer Pattern) ์ด์ผ๊ธฐ #1 (์์ ํฌํจ)
2019.09.12
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.