[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item05 ์™„๋ฒฝ๊ณต๋žต. ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด

2023. 1. 16. 09:56ใ†JAVA/Effective JAVA

728x90

 

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)

 

์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ SOLID

SRP : ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™ (Single Responsibility principle) -> ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ์œ„์— ํ•œ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค. ์ด๊ฒƒ๋งŒ ๋ณด๋ฉด ๋ง์€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€๋งŒ ํ•˜๋‚˜์˜ ์ฑ…์ž„?? ์ด๋ ‡๊ฒŒ

hyejin.tistory.com

์ด์ค‘์—์„œ ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ocp ์›์น™์ธ ๊ฐœ๋ฐฉ-ํ์‡„์˜ ์›์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

SpellChecker์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด Dictionary ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์—†์ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ข€ ๋” ํŽธ๋ฆฌํ•ด์ง„๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90