์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์
- ํ๋ฐฉ์ฟผ๋ฆฌ
- ์คํ
- StringBuffer
- ๋
- ์๋ฐ
- ๋ฐ์ดํฐํ์
- ๋ฐฑ์ค11053 #ํ์ด์ฌ #python
- ๋ฐฑ์ค9012
- ์คํธ๋ฆผ
- stream
- ๋ฐฑ์ค9093
- ์คํ์์ด
- ๋ฌธ์์ด
- ๋ฐฑ์ค1874
- ์ฐ์ฐ์
- ๋ฐฐ์ด
- ์ฐ
- StringBuilder
- ์ฟ ํกDB
- ์ฟ ํกERD
- java
- Today
- Total
Tech Log ๐ ๏ธ
[๋์์ธ ํจํด] ์ถ์ ํฉํ ๋ฆฌ ํจํด์ด๋? ๋ณธ๋ฌธ
์ถ์ ํฉํ ๋ฆฌ ํจํด์ด๋?
๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กดํ์ง ์๊ณ ๋ ์๋ก ์ฐ๊ด ๋ ๊ฐ์ฒด๋ค์ ์กฐํฉ์ ๋ง๋ค์ด์ฃผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํจํด์ด๋ค.
์๋ฅผ ๋ค์ด์, ์ด๋ค GUI ํ๊ฒฝ์์ ํด๋ฆญ๊ณผ ์คํฌ๋กค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ์๊ฐํด๋ณด์
์ด์์ฒด์ ๋ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค (์๋์ฐ , ๋งฅ , ๋ฆฌ๋ ์ค)
๊ทธ๋ฆฌ๊ณ ์ด์์ฒด์ ์ ์ข ๋ฅ์ ์๊ด ์์ด ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ๋์ผํ ์ญํ ์ ํ๋ค
์ถ์ ํฉํ ๋ฆฌ๋ ๋์ผํ OS์ ๋ํด ์ผ๊ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ค๋ค.
์ถ์ ํฉํ ๋ฆฌ์ ์์๋ค์ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
AbstractFactory
- ์ค์ ํฉํ ๋ฆฌ ํด๋์ค์ ๊ณตํต ์ธํฐํ์ด์ค
- GUI๋ก ์น๋ฉด ๋ชจ๋ OS ๋ฒ์ ์ ๋ด๋ ์ธํฐํ์ด์ค์ด๋ค.
ConcreteFactory
- ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค๋ก AbstractFactory ํด๋์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํจ์ผ๋ก์จ ๊ตฌ์ฒด์ ์ธ ์ ํ์ ์์ฑํ๋ค.
- GUI๋ก ์น๋ฉด OS์ ๋ง๋ ๊ธฐ๋ฅ์ ์ํํ๋ ํด๋์ค์ด๋ค.
AbstractProduct
- ์ ํ์ ๊ณตํต ์ธํฐํ์ด์ค
- GUI๋ก ์น๋ฉด ๊ณตํต ๊ธฐ๋ฅ(์ถ์์ ์ผ๋ก)์ ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค์ด๋ค.
ConcreteProduct
- ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค์์ ์์ฑ๋๋ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ
- ์ฌ๊ธฐ์ ๊ฐ๊ฐ์ OS์ ๋ง๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์ฌ์ฉ์๋ GUI์ ์ ์ํ ๋ OS ์ ๋ง๋ ๊ธฐ๋ฅ๋ค์ ์ํํ ์ ์๋ค.
๊ตฌํ ์ฝ๋
์ถ์ ํฉํ ๋ฆฌ ํจํด์๋ ์ธํฐํ์ด์ค๊ฐ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
๋จผ์ AbstractFactory ์ AbstractProduct ๋ฅผ ๊ตฌํํด๋ณด์ - ๊ธฐ๋ฅ์ ํด๋ฆญ๊ณผ ์คํฌ๋กค์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค.
GuiFac(AbstractFactory)
public interface GuiFactory {
public Click runClick();
public Scroll scroll();
}
Click(AbstractProduct)
public interface Click {
public void click();
}
Scroll(AbstractProduct)
public interface Click {
public void click();
}
๊ธฐ๋ฅ ๋ ๊ฐ๋ฅผ ์ธํฐํ์ด์คํ ํจ์ผ๋ก์จ ๊ฐ๊ฐ์ OS๋ ์ด ๊ธฐ๋ฅ๋ค์ ๊ตฌ์ฒดํํ๋ฉด ๋๋ค.
๋ง์ฝ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ํ์
LinuxClick(ConcreteProduct)
public class LinuxClick implements Click{
@Override
public void click() {
System.out.println("๋ฆฌ๋
์ค ํ๊ฒฝ์์ ํด๋ฆญํฉ๋๋ค.");
}
}
LinuxScroll(ConcreteProduct)
public class LinuxScroll implements Scroll {
@Override
public void scroll() {
System.out.println("๋ฆฌ๋
์ค ํ๊ฒฝ์์ ์คํฌ๋กคํฉ๋๋ค.");
}
}
์ด๋ ๊ฒ ๋ ๊ฐ์ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
๊ฐ๊ฐ ๋ฏธ๋ฆฌ ์์ฑํด๋์ Click , Scroll ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฒดํํ๋ค.
๊ตฌํ๋ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ค๋ฉด ConcreteFactory ๊ฐ ํ์ํ๋ค.
LinuxGuiFac(ConcreteFactory)
public class LinuxGuiFac implements GuiFactory {
@Override
public Click runClick() {
return new LinuxClick();
}
@Override
public Scroll scroll() {
return new LinuxScroll();
}
}
์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋ฌ๋ค
๋ฉ์ธ์์ ๊ธฐ๋ฅ์ ์คํ์์ผ๋ณด์
public class main {
public static void main(String[] args) {
GuiFactory gui = new LinuxGuiFac();
Click click = gui.runClick();
Scroll scroll = gui.scroll();
click.click();
scroll.scroll();
}
}
์ด ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด,
๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ๋ ์ค์์ ์คํํ ๊ฒฐ๊ณผ ๊ฐ์ด ๋์จ๋ค.
๋ง์ฝ ๋ฆฌ๋ ์ค๊ฐ ์๋๋ผ ๋ค๋ฅธ ํ๊ฒฝ(์๋์ฐ , ๋งฅ) ์์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์์์ ํ๋ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ ์งํํ๋ฉด ๋๋ค.
(๊ณผ์ ์๋ต)
public class main {
public static void main(String[] args) {
GuiFactory gui = new WindowGuiFac();
Click click = gui.runClick();
Scroll scroll = gui.scroll();
click.click();
scroll.scroll();
}
}
์๋์ฐ๋ก ๊ตฌํ ํฉํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์๋ค.
์ด๋ ๊ฒ ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์ฌ์ฉํ๋ฉด ์์กด์ฑ์ ์ฃผ์ ํด์ฃผ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ตฌํ ์ฝ๋์ ๋ณ๊ฒฝ์์ด ๊ธฐ๋ฅ ๊ตฌํ์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://www.youtube.com/watch?v=soV1C6j9kkg
https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Application Context VS Bean Factory (0) | 2023.06.24 |
---|---|
StringBuilder VS StringBuffer (0) | 2023.06.04 |
[TIL] ์ธ์ ์ธ์ฆ๊ณผ ํ ํฐ ์ธ์ฆ ๋ฐฉ์ (0) | 2023.03.22 |
[java] ์ ๋ค๋ฆญ (0) | 2023.03.07 |
[java] ์คํธ๋ฆผ ์์ ์ฒ๋ฆฌ (0) | 2023.02.28 |