Skip to content

Latest commit

Β 

History

History
74 lines (45 loc) Β· 3.92 KB

AbstractFactoryMethodPattern-junha.md

File metadata and controls

74 lines (45 loc) Β· 3.92 KB

[생성 νŒ¨ν„΄] Abstract Factory Method Pattern


좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ΄λž€?

좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ€ 생성 νŒ¨ν„΄μ˜ ν•œ μ’…λ₯˜λ‘œ 객체의 집합을 생성할 λ•Œ μœ λ¦¬ν•œ νŒ¨ν„΄μž…λ‹ˆλ‹€. 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ€ μ•žμ—μ„œ μ†Œκ°œν•œ νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄ν•˜κ³ λŠ” λ‹€λ₯Ό νŒ¨ν„΄μž…λ‹ˆλ‹€. 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ€ κΈ°μ‘΄ νŒ©ν† λ¦¬ νŒ¨ν„΄μ—μ„œ ν•œλ²ˆ 더 μΆ”μƒν™”μ‹œμΌœμ„œ μ„œλ‘œ 관련이 μžˆλŠ” μ œν’ˆμ„ μƒμ„±ν•˜κ²Œ ν•΄ μ€λ‹ˆλ‹€. 즉 ꡬ상 ν΄λž˜μŠ€λ“€μ„ μ§€μ •ν•˜μ§€ μ•Šκ³ λ„ 객체의 λͺ¨μŒμ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.


μ™œ Factory Pattern이 λ‚˜μ˜€κ²Œ 된 걸까?

μ΄λŸ¬ν•œ 객체듀을 ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ λͺ¨λ“  UIλ₯Ό 각자 λ‹€λ₯Έ 객체둜 λ§Œλ“€κ²Œ 되면 λ‚˜μ€‘μ— μˆ˜μ •μ΄ μ–΄λ €μšΈ 수 있기 λ•Œλ¬Έμ— μ΄λŸ¬ν•œ 객체듀을 ν‘œν˜„ν•˜λŠ” ν•˜λ‚˜μ˜ 좔상 클래슀λ₯Ό μ •μ˜ν•˜μ—¬ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.


좔상 νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄μ€ 주둜 μ–΄λ–€ κ²½μš°μ— μ‚¬μš©ν• κΉŒ?

생성을 μ±…μž„μ§€λŠ” ꡬ체적인 클래슀λ₯Ό λΆ„λ¦¬μ‹œν‚€κ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€ 이름에 좔상이 λ“€μ–΄κ°„λ‹€λŠ” 것은 μΊ‘μŠν™”ν•œλ‹€λΌκ³  μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€. κ·Έ λœ»μ€ μΈμŠ€ν„΄μŠ€λ₯Ό μΆ”μƒν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이러면 μœ„μ—μ„œ λ§ν•œ 생성에 κ΄€ν•œ ꡬ체적인 λ‚΄μš©μ΄ μ‚¬μš©μžμ™€ λΆ„λ¦¬λ©λ‹ˆλ‹€. 주둜 μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” μ—¬λŸ¬ μ œν’ˆμ„ 선택을 ν†΅ν•˜μ—¬ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜κ³  μ œν’ˆκ΅°μ„ λŒ€μ²˜ν•˜κ³  싢을 λ•Œμž…λ‹ˆλ‹€. 좔상 νŒ©ν† λ¦¬λŠ” ν•„μš”ν•œ λͺ¨λ“  것을 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— 전체 μ œν’ˆκ΅°μ€ ν•œ λ²ˆμ— 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€.


νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄ VS 좔상화 νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄

νŒ©ν† λ¦¬ λŒ€μ‹  좔상화 νŒ©ν† λ¦¬λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ”?

  • μ œν’ˆκ΅°μ€‘ ν•˜λ‚˜λ₯Ό μ„ νƒν•΄μ„œ μ‹œμŠ€ν…œμ„ μ„€μ •ν•΄μ•Ό ν•˜κ³  κ΅¬μ„±ν•œ μ œν’ˆκ΅°μ„ λ‹€λ₯Έ κ²ƒμœΌλ‘œ λŒ€μ²΄ν•  수 μžˆμ„ λ•Œ
  • μ—°κ΄€λœ λ‹€μˆ˜μ˜ μΈμŠ€ν„΄μŠ€κ°€ ν•¨κ»˜ μ„€κ³„λ˜κ±°λ‚˜ μ™ΈλΆ€λ‘œλΆ€ν„° 무언가λ₯Ό μ œμ•½ν•˜κ³  싢을 경우

쑰금 μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄ 연관이 μžˆλŠ” 객체λ₯Ό λ¬Άμ–΄μ„œ μƒμ„±ν•˜λŠ” κ²½μš°μ— 좔상화 νŒ©ν† λ¦¬ νŒ¨ν„΄μ΄ νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄μ— λΉ„ν•΄μ„œ μœ λ¦¬ν•©λ‹ˆλ‹€. (ν•˜μ§€λ§Œ μ €λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό ꡳ이 숨길 ν•„μš” μ—†λŠ” μ½”λ“œμ—λŠ” 쑰금 더 κ°„λ‹¨ν•œ νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.)


좔상 νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄ ꡬ쑰 이해해 보기!

[##Image|kage@cyswJC/btr0JNtWXGQ/glomoVLfSQAzdTf9aNSKLk/img.gif|CDM|1.3|{"originWidth":3024,"originHeight":4032,"style":"alignCenter","width":400,"height":533,"filename":"tempImageuUNPV1.gif"}##]

Avstract Factory = AvstractFactoryMethod(맨 μœ„μ— μžˆλŠ” 것) = Facroty 좔상화 νƒ€μž…

Concrete Factory = iPhoneFactory, iPadFactory = 각 연관이 μžˆλŠ” μΈμŠ€ν„΄μŠ€ 집합을 생성할 Factory νƒ€μž…

Abstract Product = CButton, CLabel = 생성됨 μΈμŠ€ν„΄μŠ€λ₯Ό μΆ”μƒν™”ν•œ νƒ€μž…

Concrete Product = iPhoneButton, iPadLabel, iPadButton, iPhoneLabel = μ΅œμ’…μ μœΌλ‘œ μƒμ„±λ˜λŠ” ꡬ체적인 νƒ€μž…


좔상 νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄μ˜ μž₯단점

μž₯점

  • νŒ©ν† λ¦¬μ—μ„œ μƒμ„±λ˜λŠ” μ œν’ˆμ˜ μƒν˜Έ ν˜Έν™˜μ„ 보μž₯ν•  수 μžˆλ‹€.
  • 단일 μ±…μž„ 원칙이기 λ•Œλ¬Έμ— μ½”λ“œλ₯Ό μ‰½κ²Œ μœ μ§€λ³΄μˆ˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€
  • λ‚˜λ¨Έμ§€λŠ” νŒ©ν† λ¦¬ λ©”μ„œλ“œμ™€ λ™μΌν•œ μž₯μ μž…λ‹ˆλ‹€

단점

  • 단점 μ—­μ‹œ νŒ©ν† λ¦¬ λ©”μ„œλ“œμ™€ λ™μΌν•œ λ‹¨μ μž…λ‹ˆλ‹€

좔상 νŒ©ν† λ¦¬ λ©”μ„œλ“œ 예제 μ½”λ“œ

Abstract Factory Method Pattern μ˜ˆμ œμ½”λ“œ


λŠλ‚€ 점 및 였λ₯˜

μ˜€λŠ˜μ€ μ‰½κ²Œ ν‘ΈλŠ” 것이 λ„ˆλ¬΄ μ–΄λ €μ› μŠ΅λ‹ˆλ‹€... κ·Έλž˜μ„œ μ„€λͺ…도 미흠 ν–ˆκ³  κ·Έλ‚˜λ§ˆ μ½”λ“œλ₯Ό λ³΄μ‹œλ©΄ μ΄ν•΄λŠ” λ˜μ‹€ 텐데 μžλ£Œλ„ ν•΄μ™Έλ₯Ό μœ„μ£Όλ‘œ λ΄μ„œμš”... 였늘의 λΈ”λ‘œκ·ΈλŠ” 쑰금 ν›„νšŒλ§Œ λ‚¨μŠ΅λ‹ˆλ‹€. λΉ λ₯Έ μ‹œμΌ 내에 μˆ˜μ •ν•΄μ„œ μ‘°κΈˆμ΄λΌλ„ 더 도움이 λ˜λŠ” λΈ”λ‘œκ·Έκ°€ λ˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€.