2023. 1. 16. 09:56ใJAVA/Effective JAVA
item05. ์์์ ์ง์ ๋ช ์ํ์ง ๋ง๊ณ ์์กด๊ฐ์ฒด์ฃผ์ ์ ์ฌ์ฉํ๋ผ.
" p29. ํฉํฐ๋ฆฌ ๋ฉ์๋ ํจํด"
ํฉํฐ๋ฆฌ ๋ฉ์๋ ํจํด Factory Method Pattern ์ด๋?
: ๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด์ผ๋ก Factory Method๋ ๋ถ๋ชจ(์์) ํด๋์ค์ ์๋ ค์ง์ง ์์ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์์ฑํ๋ ํจํด์ด๋ฉฐ, ์์(ํ์) ํด๋์ค๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ง๋ฅผ ๊ฒฐ์ ํ๋๋ก ํ๋ ํจํด์ด๊ธฐ๋ ํ๋ค.
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ง ์๋ธ ํด๋์ค์์ ๊ฒฐ์ ํ๊ฒ ๋๋ค. (์ธ์คํด์ค์ ์์ฑ์ ์๋ธํด๋์ค์ ์์)
๋ฐ๋ผ์ ๋ถ๋ชจ ์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค์๋ง ์์กดํ๊ณ ์ค์ ๋ก ์ด๋ค ๊ตฌํ ํด๋์ค๋ฅผ ํธ์ถํ ์ง๋ ์๋ธ ํด๋์ค์์ ๊ตฌํํ๋ค.
-> ์๋ก์ด product๋ฅผ ์ ๊ณตํ๋ ํฉํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ํฉํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค.
Dictionary
public interface Dictionary
{
boolean contains(String word);
List<String> closeWordsTo(String typo);
}
SpellChecker
public class SpellChecker
{
private Dictionary dictionary;
public SpellChecker(DictionaryFactory dictionaryFactory)
{
this.dictionary = dictionaryFactory.dictionary();
}
}
-> ์ด๋ ๊ฒ ๋ณด๋ฉด SpellChecker๋ ์ธํฐํ์ด์ค์๋ง ์์กดํ๊ณ ์ค์ ๋ก ์ด๋ค ๊ตฌํ ํด๋์ค๋ฅผ ํธ์ถํ ์ง๋ ์๋ธ ํด๋์ค์์ ๊ตฌํํ๊ฒ ๋๋ค.
DictionaryFactory
public interface DictionaryFactory
{
Dictionary dictionary();
}
DefaultDictionaryFactory
public class DefaultDictionaryFactory implements DictionaryFactory
{
@Override
public Dictionary dictionary()
{
return new DefaultDictionary();
}
}
ํฉํฐ๋ฆฌ ๋ฉ์๋ ํจํด Factory Method Pattern ์ฌ์ฉ ์ฅ์
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น SOLID (tistory.com)
์ด์ค์์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ํจํด์ ์ฌ์ฉํ๋ฉด ocp ์์น์ธ ๊ฐ๋ฐฉ-ํ์์ ์์น์ ์งํฌ ์ ์๋ค.
SpellChecker์์๋ ํ์ธํ ์ ์๋ฏ์ด Dictionary ์ธํฐํ์ด์ค์๋ง ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋์ค๋ก ๋ณ๊ฒฝํ๋ค๊ณ ํด์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ์์ด ๋ค๋ฅธ ํด๋์ค๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค. ์ฆ, ์ ์ง๋ณด์๊ฐ ์ข ๋ ํธ๋ฆฌํด์ง๋ค.