loki d 2021. 9. 4. 23:02
728x90

좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄

νŒ¨ν„΄μ˜ λΆ„λ₯˜ : 생성 νŒ¨ν„΄

νŒ¨ν„΄μ˜ λͺ©μ  : This pattern provide an interface for creating families of related or dependent objects without specifying their concrete classes. – GoF –

νŒ¨ν„΄μ˜ 적용

  • μ‹œμŠ€ν…œμ΄ νŠΉμ • μ’…λ₯˜μ˜ μ œν’ˆκ΅°μœΌλ‘œ ꡬ성이 λ˜μ–΄μ•Ό ν•  경우
  • νŠΉμ • μ’…λ₯˜μ˜ μ œν’ˆκ΅°μ˜ λ™μ‹œ μ‚¬μš©μ„ κ°•μ œν™”ν•  ν•„μš”κ°€ μžˆλŠ” 경우
  • μƒμ„±λ˜λŠ” ꡬ체적 μ œν’ˆκ΅°μ„ μˆ¨κΈ°λŠ” μ œν’ˆκ΅° 생성 라이브러리λ₯Ό μ œκ³΅ν•˜κ³  싢은 경우
  • νŒ¨ν„΄ 적용 κ°€λŠ₯μ‹œλ‚˜λ¦¬μ˜€ : ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” GUI μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•  수 있음

    νŒ¨ν„΄μ˜ μ°Έμ—¬μž

  • 좔상 νŒ©ν† λ¦¬(abstract factory): μ œν’ˆκ΅°μ— μ†Œμ†λœ 각 μ œν’ˆμ„ μƒμ„±ν•˜κΈ° μœ„ν•œ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•¨. 이 λ§€μ†Œλ“œλ“€μ˜ 합이 μ œν’ˆκ΅°μ˜ μ†Œμ†λœ μ œν’ˆμ˜ λͺ©λ‘ μ—­ν• κΉŒμ§€ ν•  수 있음
  • ꡬ체적 νŒ©ν† λ¦¬(concrete factory): μ œν’ˆμ„ μ‹€μ œ μƒμ„±ν•˜λŠ” 클래슀
  • μ œν’ˆ(abstract product): 생성될 객체의 좔상 클래슀 λ˜λŠ” interface. μ΅œλŒ€ μ œν’ˆκ΅°μ— μ†Œμ†λœ μ œν’ˆ μ’…λ₯˜ 만큼 ν•„μš”ν•  수 있음
  • ꡬ체적 μ œν’ˆ(concrete product): μ‹€μ œ 생성될 객체의 클래슀

νŒ¨ν„΄μ˜ ꡬ쑰

μŠ€ν¬λ¦°μƒ· 2021-08-17 μ˜€μ „ 12 17 18

  • νŠΉμ • μ œν’ˆκ΅°μ˜ μ œν’ˆμ„ μƒμ„±ν•˜κ³  μ‹ΆμœΌλ©΄ ν•΄λ‹Ή ꡬ체적 νŒ©ν† λ¦¬λ₯Ό μ‚¬μš©ν•¨
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” λͺ¨λ“  ꡬ체적 νŒ©ν† λ¦¬λ₯Ό μ‚¬μš©ν•  수 있음

    νŒ¨ν„΄μ˜ μž₯단점

  • μž₯점
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” ꡬ체적 νƒ€μž… λŒ€μ‹ μ— 좔상 νƒ€μž…μ„ 톡해 객체λ₯Ό μ‚¬μš©ν•¨
    • μ‚¬μš©ν•˜λŠ” μ œν’ˆκ΅°μ˜ 변경을 μš©μ΄ν•˜κ²Œ ν•΄μ€Œ
    • μ‚¬μš©ν•˜λŠ” 객체 κ°„ 일관성(μ„œλ‘œ ν˜Έν™˜λœλ‹€λŠ” 것)을 ν™•μ‹ ν•  수 있음
  • 단점
    • ꡬ체적 νŒ©ν† λ¦¬λŠ” ꡬ체적 μ œν’ˆκ³Ό λ‹¨λ‹¨ν•˜κ²Œ μ—°κ²°λ˜μ–΄ 있으며, 생성할 수 μžˆλŠ” μ œν’ˆκ΅°μ΄ 좔상적 νŒ©ν† λ¦¬ interfaceλ₯Ό 톡해 κ³ μ •λ˜μ–΄ 있음. λ”°λΌμ„œ μ œν’ˆκ΅°μ— μƒˆ μ’…λ₯˜μ˜ μ œν’ˆμ„ μΆ”κ°€ν•˜λŠ” 것이 νž˜λ“¦

νŒ¨ν„΄μ˜ λ³€ν˜•

  • μ œν’ˆκ΅°μ˜ 각 μ œν’ˆλ§ˆλ‹€ ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλΌ 인자λ₯Ό μ΄μš©ν•˜μ—¬ μ œν’ˆμ„ μƒμ„±ν•˜λŠ” ν˜•νƒœ 둜 λ§Œλ“€ 수 있음. ν•˜μ§€λ§Œ λͺ¨λ“  μ œν’ˆμ„ μ•„μš°λ₯΄λŠ” νƒ€μž…μ„ λ§Œλ“€μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— C++, μžλ°”μ™€ 같은 언어듀을 μ΄μš©ν•˜μ—¬ 이와 같은 λ°©λ²•μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 것은 쉽지 μ•ŠμŒ

κ΄€λ ¨ νŒ¨ν„΄

  • 싱글톀 νŒ¨ν„΄ : 보톡 ꡬ체적 νŒ©ν† λ¦¬λ“€μ€ νš¨μœ¨μ„± λ•Œλ¬Έμ— 싱글톀 νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„λ¨