์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- stream
- ์
- ๋ฌธ์์ด
- ๋ฐฑ์ค9093
- ๋
- ์ฐ์ฐ์
- ๋ฐฐ์ด
- ์คํ
- ๋ฐ์ดํฐํ์
- ์๋ฐ
- StringBuilder
- ๋ฐฑ์ค1874
- StringBuffer
- ์ฐ
- ์ฟ ํกERD
- ๋ฐฑ์ค9012
- java
- ์คํ์์ด
- ํ๋ฐฉ์ฟผ๋ฆฌ
- ์ฟ ํกDB
- ์คํธ๋ฆผ
- ๋ฐฑ์ค11053 #ํ์ด์ฌ #python
- Today
- Total
Tech Log ๐ ๏ธ
[๋์์ธ ํจํด]์ถ์ ํฉํ ๋ฆฌ ํจํด ๋ณธ๋ฌธ
์ฃผ์ ๋์์ธ ํจํด 13๊ฐ์ง
1. ์์ฑ ํจํด
- ์ถ์ ํฉํ ๋ฆฌ ํจํด
- ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด
2. ํ๋ ํจํด
- ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
- ์ฑ๊ธํค ํจํด
- ์ํ ํจํด
- ๋ฐ๋ณต์ ํจํด
- ์ ๋ต ํจํด
- ์ต์ ๋ฒ ํจํด
3. ๊ตฌ์กฐ ํจํด
- ๋ฐ์ฝ๋ ์ดํฐ ํจํด
- ํ๋ก์ ํจํด
- ์ปดํฌ์งํธ ํจํด
- ์ด๋ํฐ ํจํด
- ํผ์ฌ๋ ํจํด
1. ์ถ์ ํฉํ ๋ฆฌ ํจํด์ด๋?
- ํฉํ ๋ฆฌ ํด๋์ค๋ฅผ ํตํด ๊ตฌ์ ํด๋์ค์ ์์กดํ์ง ์๊ณ ๋ ๊ฐ์ฒด๋ค์ ์กฐํฉ์ ๋ง๋ค ์ ์๋ ํจํด
- ํฉํ ๋ฆฌ ํด๋์ค๋ ์๋ก ๊ด๋ จ์ด ์๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ด๋ค.
*์๋ก ๊ด๋ จ์ด ์๋ ๊ด๊ณ์ ์์
- ์ปดํจํฐ ๋ธ๋๋ : ์ผ์ฑ , LG
- ์ด์์ฒด์ ์ ๋ฐ๋ฅธ GUI : ๋งฅ , ๋ฆฌ๋ ์ค , ์๋์ฐ
์ผ์ฑ ์ปดํจํฐ ๋ธ๋๋ ๊ณต์ฅ์์๋ ์ผ์ฑ ์ปดํจํฐ ๋ถํ์ ์ฐ์ด๋ด๊ณ ,
๋งฅ ํ๊ฒฝ์์๋ ๋งฅ GUI์์ ๋งฅ ํ๊ฒฝ์์์ GUI๋ฅผ ๊ตฌํํ๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ๋ธ๋๋ , ์ด์์ฒด์ ์ ์ข ๋ฅ์ ์๊ด์์ด ๊ทธ๊ฒ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋์ผํ๋ค๋ ๊ฒ์ด๋ค.
ํฅํ ์ด "๊ธฐ๋ฅ"์ ์ถ์ํด๋์ค๋ ์ธํฐํ์ด์ค๋ก ๋ฌถ์ด์ง๋ค.
2. ์ถ์ ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ถ์ ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด?
๋จ์ฝ ์๋์ฐ ํ๊ฒฝ์์ GUI ๊ธฐ๋ฅ์ ๋ง๋ค๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์
ํด๋ฆญ๊ณผ ์คํฌ๋กค ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณผ๊ฒ์ด๋ค.
Click click = WinGui.runClick();
Scroll scroll = WinGui.runScroll();
// ์๋์ฐ ํด๋ฆญ , ์คํฌ๋กค ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค.
click.click();
scroll.scroll();
// ๊ฐ๊ฐ์ ๊ธฐ๋ฅ ์คํ
ํ์ง๋ง ์ด์ ์๋์ฐ๊ฐ ์๋ ๋ฆฌ๋ ์ค ๊ธฐ๋ฅ๊น์ง ์ถ๊ฐํด์ผํ๋ค๋ฉด ์ด๋จ๊น?
Click click = LinuxGui.runClick();
Scroll scroll = LinuxGui.runScroll();
// ์๋์ฐ ํด๋ฆญ , ์คํฌ๋กค ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค.
click.click();
scroll.scroll();
// ๊ฐ๊ฐ์ ๊ธฐ๋ฅ ์คํ
์ด์ฒ๋ผ ๊ตฌํ ์ฝ๋๋ฅผ ๋ค์ ์์ ํ์ฌ์ ์ฝ๋์ ๋ฐ์ํด์ฃผ์ด์ผํ๋ค.
์ฆ, ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ์ฝ๋์ ์์กดํ๊ฒ ๋๋ค.
์ด๊ฒ์ ์ถ์ ํฉํ ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ๋ฐ๊ฟ๋ณผ๋ ค๊ณ ํ๋ค.
GuiFactory gui = new WinGuiFac();
Click click = gui.runClick();
Scroll scroll = gui.runScroll();
click.click();
scroll.scroll();
๋ค์๊ณผ ๊ฐ์ด ํฉํ ๋ฆฌ ๊ตฌํ์ฒด๋ฅผ ๋ฐ์์ ํด๋น ํฉํ ๋ฆฌ์ ๋ฉ์๋๋ฅผ ์คํ์ํค๋ ๋ฐฉ์์ผ๋ก ๋ฆฌํฉํ ๋งํ์๋ค.
๊ทธ๋ผ ๋ค์ ์๋์ฐ ๊ธฐ๋ฅ์ ์ฐ๋ ค๋ฉด?
GuiFactory gui = new WinGuiFac();
// ์ฌ๊ธฐ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋จ
Click click = gui.runClick();
Scroll scroll = gui.runScroll();
click.click();
scroll.scroll();
ํฉํ ๋ฆฌ ํ๋๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค !
๊ธฐ์กด ๊ตฌํ ํด๋์ค์ ์์กดํ๋ ๊ฒ์ ๋นํ๋ฉด ํจ์ฌ ๊ฐ์ ๋์๋ค.
3. ์ถ์ ํฉํ ๋ฆฌ ๊ตฌํ ๋ฐฉ๋ฒ
์์์ ์ถ์ ํฉํ ๋ฆฌ๊ฐ ์ด๋ค ๊ฒ์ด ๋๋ต ์์๋ค๋ฉด , ์ด์ ์ด๋ป๊ฒ ๊ตฌํ์ ํ๋ ๊ฒ์ด ์ข์๊น ?
๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
AbstractFactory : ๋ชจ๋ ํฉํ ๋ฆฌ ๊ตฌํ์ฒด๋ฅผ ๋ด์ ์ ์๋ ์ธํฐํ์ด์ค (ํน์ ์ถ์ ํด๋์ค)์ด๋ค.
ConcreteFactory : AbstractFactory์ ์ถ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํจ์ผ๋ก์จ ์ ํ/๊ธฐ๋ฅ์ ์์ฐํ๋ค.
์ฌ๊ธฐ์ ์ผ์ฑ/LG , ๋ฆฌ๋ ์ค/์๋์ฐ ์ฒ๋ผ ์ฌ๋ฌ ํ์ ์ผ๋ก ๋๋จ
ConcreteProduct : ํฉํ ๋ฆฌ์์ ์์ฑ๋๋ ๊ตฌ์ฒด์ ์ธ ์ ํ/๊ธฐ๋ฅ์ด๋ค.
AbstractProduct๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.
AbstractProduct : ConcereteProduct์ ๊ณตํต ์ธํฐํ์ด์ค์ด๋ค.
๊ตฌ์ฒด์ ์ธ ์ฝ๋๋ค์ ์ดํด๋ณด์
AbstractFactory
public interface GuiFactory {
public Click runClick();
public Scroll runScroll();
}
ConcreteFactory
public class WindowGuiFac implements GuiFactory {
@Override
public Click runClick() {
return new WindowClick();
}
@Override
public Scroll runScroll() {
return new WindowScroll();
}
}
AbstractProduct
public class WindowClick implements Click {
@Override
public void click() {
System.out.println("์๋์ฐ ํ๊ฒฝ์์ ํด๋ฆญํฉ๋๋ค.");
}
}
public class WindowScroll implements Scroll {
@Override
public void scroll() {
System.out.println("์๋์ฐ ํ๊ฒฝ์์ ์คํฌ๋กคํฉ๋๋ค.");
}
}
ConcreteProduct
public class WindowGuiFac implements GuiFactory {
@Override
public Click runClick() {
return new WindowClick();
}
@Override
public Scroll runScroll() {
return new WindowScroll();
}
}
๊ตฌํ์ ์ด๋ ค์ธ ์ ์์ง๋ง ํด๋ผ์ด์ธํธ ์ฝ๋๋
public class main {
public static void main(String[] args) {
GuiFactory gui = new LinuxGuiFac();
Click click = gui.runClick();
Scroll scroll = gui.runScroll();
click.click();
scroll.scroll();
}
}
์ด๋ ๊ฒ ๊ฐ๋จํด์ง๋ค.
์์ฝ์ ํ์๋ฉด
ํด๋ผ์ด์ธํธ์์ ์ถ์ ํฉํ ๋ฆฌ(Abstract Factory)์ ํฉํ ๋ฆฌ(Concrete Factory) ์ฃผ์
-> ํฉํ ๋ฆฌ์์ ๊ธฐ๋ฅ ๊ตฌํ ๋ฉ์๋ ํธ์ถ (Concrete Product)
-> ์ถ์ ๊ธฐ๋ฅ ์ธํฐํ์ด์ค(Abstract Product)๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๊ตฌํ ํด๋์ค(Concrete Product)์์ ๊ธฐ๋ฅ ๋ฐํ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
4. ์ถ์ ํฉํ ๋ฆฌ์ ์ฅ๋จ์
์ฅ์ :
1. ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ์๋๋ค.
- ํฉํ ๋ฆฌ๋ฅผ ํตํด ๊ธฐ๋ฅ์ ์์ฑํ๋ ๊ณผ์ ๊ณผ ์ฑ ์์ ์บก์ํ ํ์๊ธฐ ๋๋ฌธ์ด๋ค.
2. ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ์์ผ๋ฏ๋ก ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝ ์์ ๋ณ๊ฒฝํด์ผ ํ ์ฝ๋๊ฐ ์ค์ด๋ ๋ค.
๋จ์ :
1. ์ฝ๋๊ฐ ํ์ ์ด์์ผ๋ก ๋ณต์กํด ์ง ์ ์๋ค.
2. ์๋ก์ด ๋ฉ์๋(๊ธฐ๋ฅ,์ ํ ๋ฑ) ์ ์ถ๊ฐํ๋ ๊ฒ ์ด๋ ต๋ค.
- ์ถ๊ฐํ๋ ค๋ฉด Abstract Product๋ฅผ ๋ณ๊ฒฝํด์ผํ๋๋ฐ ์ด๋ฌ๋ฉด ๋ชจ๋ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค.
5. ๊ฒฐ๋ก
์ฌ๋ฌ ์ ํ์ด๋ ๊ธฐ๋ฅ๊ตฐ์ด ์๊ณ ๊ทธ๋ค๋ผ๋ฆฌ ํ๋๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋ ๋์ฒดํ ์ ์์ ๋ ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์ฝ๋๊ฐ ์กฐ๊ธ ๋ณต์กํด์ง๊ฑฐ๋ ๋์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
https://www.youtube.com/watch?v=qXcxySA-Qes&t=370s
https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html
https://refactoring.guru/ko/design-patterns/abstract-factory