Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
Tags
- pull model
- ๋ฐ์ดํฐ ์ฟผ๋ฆฌ
- ๊ธฐ๋ฅ ํ ์คํธ
- ํญํด ํ๊ธฐ
- ํญํดํ๋ฌ์คํ๊ธฐ
- ํญํด+
- ํญํดํ๋ฌ์ค
- ํญํดํ๋ฌ์ค ํ๊ธฐ
- fanout on read
- ํญํ ๋ฐฑ์๋
- ํญํดํ๋ฌ์ค๋ฐฑ์๋
- ํ๋กํ ํ์ ๋น
- push model
- ํญํด
- ์ฑ๊ธํค ๋น
- ๋์์ธ ํจํด
- API Aggregation
- OOP
- ํผ๋ ๊ตฌํ
- ์์ฐจ์งํฅ
- ํญํ
- ํญํด ํ๋ฌ์ค ํ๊ธฐ
- ํญํ ํ๊ธฐ
- ํญํด ๋ฐฑ์๋
- ์์ฑ ํจํด
- ๋น ์ค์ฝํ
- TDD
- fanout on write
- ํญํดํ๋ฌ์ค ๋ฐฑ์๋
- ํญํดํ๋ฌ์ค ํ๊ณ
Archives
- Today
- Total
deVlog
[๋์์ธ ํจํด] ์์ฑํจํด - Abstract Factory Pattern (์ถ์ ํฉํ ๋ฆฌ ํจํด) ๋ณธ๋ฌธ
๐ ๏ธ Software Architecture/Design Pattern
[๋์์ธ ํจํด] ์์ฑํจํด - Abstract Factory Pattern (์ถ์ ํฉํ ๋ฆฌ ํจํด)
์๋ฃจ๋ฐ 2024. 12. 4. 15:22๋ชฉ์ฐจ
๐ ๊ฐ์
๊ด๋ จ ๊ฐ์ฒด๋ค์ ๊ตฌ์ ํด๋์ค๋ค์ ์ง์ ํ์ง ์๊ณ ๋ ๊ด๋ จ ๊ฐ์ฒด๋ค์ ๋ชจ์์ ์์ฑํ ์ ์๋๋ก ํ๋ ์์ฑํจํด์ด๋ค.
- ์๋ก ๊ด๋ จ์ด ์๋ ๊ฐ์ฒด๋ค์ ํต์งธ๋ก ๋ฌถ์ด์ ์ถ์ํํ๊ณ , ํฉํ ๋ฆฌ ๊ฐ์ฒด์์ ์งํฉ์ผ๋ก ๋ฌถ์ ๊ฐ์ฒด ๊ตฐ์ ์์ฑํ๋ค.
- ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ํต์ฌ์ ์ ํ'๊ตฐ' ์งํฉ์ ํ์ ๋ณ๋ก ์ฐ์ด๋ผ ์ ์๋ค๋ ์ ์ด๋ค.
- ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ์ข ๋ ์บก์ํํ ๋ฐฉ์์ด๋ค.
๐ฉ๐ป๐ป ์ฝ๋๋ก ์์๋ณด์
buttons: ์ฒซ ๋ฒ์งธ ์ ํ์ ๊ณ์ธต๊ตฌ์กฐ
public interface Button {
void paint();
}
public class MacOSButton implements Button {
@Override
public void paint() {
System.out.println("You have created MacOSButton.");
}
}
public class WindowsButton implements Button {
@Override
public void paint() {
System.out.println("You have created WindowsButton.");
}
}
checkboxes: ๋ ๋ฒ์งธ ์ ํ์ ๊ณ์ธต๊ตฌ์กฐ
public interface Checkbox {
void paint();
}
public class MacOSCheckbox implements Checkbox {
@Override
public void paint() {
System.out.println("You have created MacOSCheckbox.");
}
}
public class WindowsCheckbox implements Checkbox {
@Override
public void paint() {
System.out.println("You have created WindowsCheckbox.");
}
}
factories/GUIFactory.java: ์ถ์ ํฉํ ๋ฆฌ
// ์ถ์ ํฉํ ๋ฆฌ
public interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// ๊ตฌ์ ํฉํ ๋ฆฌ1
public class MacOSFactory implements GUIFactory {
@Override
public Button createButton() {
return new MacOSButton();
}
@Override
public Checkbox createCheckbox() {
return new MacOSCheckbox();
}
}
// ๊ตฌ์ ํฉํ ๋ฆฌ2
public class WindowsFactory implements GUIFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
- MacOSFacotry, WindowsFactory ๋ฑ ๊ฐ ๊ตฌ์ ํด๋์ค์์ ์ ํ๊ตฐ ๋ณ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โ๏ธ ์ฅ/๋จ์
์ฅ์
- ํฉํ ๋ฆฌ์์ ์์ฑ๋๋ ์ ํ์ ์ํธ ํธํ์ ๋ณด์ฅํ ์ ์๋ค.
- ๊ตฌ์ ์ ํ๋ค๊ณผ ํด๋ผ์ด์ธํธ ์ฝ๋ ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
- ๋จ์ผ ์ฑ ์ ์์น(SRP) : ์ ํ ์์ฑ ์ฝ๋๋ฅผ ํ ๊ณณ์ผ๋ก ์ถ์ถํ์ฌ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ ์ง๋ณด์ํ ์ ์๋ค.
- ๊ฐ๋ฐฉ/ํ์ ์์น(OCP) : ๊ธฐ์กด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ํผ์ํ์ง ์๊ณ ์ ํ์ ์๋ก์ด ๋ณํ๋ค์ ์์ฑํ ์ ์๋ค.
๋จ์
- ํจํด๊ณผ ํจ๊ป ์๋ก์ด ์ธํฐํ์ด์ค๋ค๊ณผ ํด๋์ค๋ค์ด ๋ง์ด ๋์ ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ํ์ ์ด์์ผ๋ก ๋ณต์กํด์ง ์ ์๋ค. (ํฉํ ๋ฆฌ ํจํด์ ๊ณตํต์ ์ธ ๋ฌธ์ ์ )
- ๊ธฐ์กด ์ถ์ ํฉํ ๋ฆฌ์ ์ธ๋ถ ์ฌํญ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ชจ๋ ํฉํ ๋ฆฌ์ ๋ํ ์์ ์ด ํ์ํด์ง๋ค. ์ด๋ ์ถ์ ํฉํ ๋ฆฌ์ ๋ชจ๋ ๊ตฌ์ ํฉํ ๋ฆฌ์ ์์ ์ ์ด๋ํ๋ค.
- ์๋ก์ด ์ข ๋ฅ์ ์ ํ์ ์ง์ํ๋ ๊ฒ์ด ์ด๋ ต๋ค. ์๋ก์ด ์ ํ์ด ์ถ๊ฐ๋๋ฉด ์ถ์ ํฉํ ๋ฆฌ ๋ฐ ๊ตฌ์ ํฉํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
๐ ์ฐธ๊ณ
- https://refactoring.guru/ko/design-patterns/abstract-factory
- https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%EC%B6%94%EC%83%81-%ED%8C%A9%ED%86%A0%EB%A6%ACAbstract-Factory-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90