๐ 01. Abstract Factory๋?
์๋ก ๊ด๋ จ์๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌํ์ฒด๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๋ ํจํด
- ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด๊ณผ ํฉํ ๋ฆฌ ๋ถ๋ถ์ ๋งค์ฐ ์ ์ฌํ์ง๋ง, ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Client์๊ฒ ๋ง์ถฐ์ ธ ์๋ค.
- ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ๋ชฉ์ ์ ํฉํ ๋ฆฌ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ Client ์ฝ๋๋ฅผ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋๋ก ํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ๋๋ค.
๐ 02. ์ถ์ ํฉํ ๋ฆฌ ํจํด vs ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด
- ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด
์กฐ๊ฑด์ ๋ฐ๋ฅธ ๊ฐ์ฒด ์์ฑ์ ํฉํ ๋ฆฌ ํด๋์ค๋ก ์์ํ์ฌ, ํฉํ ๋ฆฌ ํด๋์ค์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจํด
- ์ถ์ ํฉํ ๋ฆฌ ํจํด
์๋ก ๊ด๋ จ์๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌํ์ฒด๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๋ ํจํด
-> ์ฆ, ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ํ๋ฒ ๋ ์ถ์ ํฉํ ๋ฆฌ๋ก ๋ฌถ์ ํ, ์ด๋ค ํด๋์ค๋ฅผ ๊ตฌํํ ๊ฒ์ธ์ง ํด๋ผ์ด์ธํธ ์ฝ๋์์ ์ฃผ์
ํด ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กด์ฑ์ ์ต๋ํ ์ ๊ฑฐํ ๊ตฌ์กฐ๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ๊ฐ์ฅ ์ธ๋ถ์์ ํธ์ถํ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ด๋ถ๋ฅผ ๊ฐ์ถ ์ ์๊ฒ๋๋ค.
<ํด๋์ค ๊ตฌ์กฐ๋>
๐ 03. Abstract Factory ํจํด ์์
- ๋จผ์ ํฉํ ๋ฆฌ ํจํด ๋ ๊ตฌํํ๋ Ship ๊ฐ์ฒด์ ๋ถํ anchor ์ wheel ์ ๋งด๋ฒ๋ณ์๋ก ์ถ๊ฐํ์.
-> anchor ์ wheel ์ ์ด๋ค ๋ถํ์ด ๋ค์ด์ฌ์ง ๋ชจ๋ฅด๋ฏ๋ก, ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ก ๊ตฌํ!
Ship.class
- ๊ทธ ๋ค์ ์ด๋ค ๋ถํ์ ์ ํํ ๊ฒ์ธ์ง ๊ตฌํ์ ์ ํ์ ๋ด๋นํ๋ ๋ถํ ํฉํ ๋ฆฌ๋ฅผ ๋ง๋ค์.
-> ์ด๋ค ๋ถํ์ ๊ตฌํํ ๊ฒ์ธ์ง๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด๊ณผ ๊ฐ์ด ํ์ ๊ตฌํ์ฒด๊ฐ ์ ํํ๋ค.
- ๊ทธ ๋ค์ ๋ฐฐ๋ฅผ ๋ง๋๋ ShipFactory ๋ฅผ interface ๋ก ์ ์ธํ์.
-> ๊ตฌ์ฒด์ ์ผ๋ก ShipFactory ๋ฅผ ๊ตฌํํ๋ ํ์ ํด๋์ค์์ ์ด๋ค ๋ถํผ๊ฐ์ฒด๋ฅผ ๊ตฌํํ ์ง ์ธ๋ถ์์ ์ฃผ์
๋ฐ์ ์ ์๋๋ก ๋ฏธ๋ฆฌ ๊ตฌํํด์ค ShipPartsFactory interface๋ฅผ ์์ฑ์๋ก ์ฃผ์
๋ฐ์.
- ์ด๋ ๊ฒ ํ๋ค๋ฉด ํด๋ผ์ด์ธํธ ์ชฝ์์, ์ด๋ค ๊ตฌํ์ ์ํ๋์ง ์ฃผ์
ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ํฉํ ๋ฆฌ ํจํด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋์ด๋ ๋ด๋ถ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๊ณ ํ์ฅํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋๋ค.
๐ 04. Abstract Factory ์ ๋ฆฌ
์ฐธ๊ณ ์๋ฃ)
https://thalals.tistory.com/403 - ํ์ฐจ๊ฒ, ์ด์ฌํ ๊ณต๋์