A A
[Design Pattern] Design Pattern

What is Design Pattern?

  • λ””μžμΈ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œ 일반적인 λ¬Έμ œλ“€μ— λŒ€ν•œ 반볡적이고 μž¬μ‚¬μš© κ°€λŠ₯ν•œ 해결책을 μ œκ³΅ν•˜λŠ” ν˜•μ‹ν™”λœ λ°©λ²•λ‘ μž…λ‹ˆλ‹€.
  • μ΄λŸ¬ν•œ νŒ¨ν„΄λ“€μ€ κ°œλ°œμžλ“€μ΄ νŠΉμ • μƒν™©μ΄λ‚˜ λ¬Έμ œμ— λŒ€ν•΄ 효과적으둜 λŒ€μ‘ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
  • λ””μžμΈ νŒ¨ν„΄μ€ 주둜 객체 지ν–₯ μ†Œν”„νŠΈμ›¨μ–΄ 섀계에 적용되며, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±, μœ μ—°μ„±, ν™•μž₯성을 λ†’μ΄λŠ” 데 도움이 λ©λ‹ˆλ‹€.

λ””μžμΈ νŒ¨ν„΄μ€ κ·œμΉ™μ΄ μ•„λ‹ˆλ‹€.

  • μ–Έμ–΄ 쒅속적이지 μ•ŠμŠ΅λ‹ˆλ‹€.
  • ν”„λ ˆμž„ μ›Œν¬ κ°œλ°œμ— 적용될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŠΉμ • μ˜μ—­μ— 쒅속적이지 μ•Šκ³  일반적으둜 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 쒋은 섀계에 λŒ€ν•œ μ œμ•ˆμ΄κΈ°λ„ ν•©λ‹ˆλ‹€.

λ””μžμΈ νŒ¨ν„΄μ€ 클래슀 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹ˆλ‹€.

  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄(C++, Java, Python λ“±)λ₯Ό μ‚¬μš©ν•  λ•Œ ν΄λž˜μŠ€λ“€μ΄ λͺ¨μΈ 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 것에 μ΅μˆ™ν•˜μ—¬ κ·ΈλŸ¬ν•œ μ’…λ₯˜λ‘œ 착각할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ·ΈλŸ¬λ‚˜ λ””μžμΈ νŒ¨ν„΄μ€ 클래슀 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹™λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄μ„œ νŠΉμ • κ³΅μ—°μ—μ„œ 그것을 λˆ„κ°€ μ—°κΈ°? 역할을 ν•˜λŠ” μ‚¬λžŒμ΄ λˆ„κ΅¬μΈμ§€λŠ” μ΄μ•ΌκΈ°μ˜ 쀄거리λ₯Ό μ–˜κΈ°ν• λ•Œ ν•„μˆ˜ 사항은 μ•„λ‹™λ‹ˆλ‹€.
    • μ€‘μš”ν•œκ±΄ μ—­ν• κ°„μ˜ ‘관계’λ₯Ό μ„€λͺ…ν•˜λŠ”κ²ƒμ΄ 더 μ€‘μš”ν•©λ‹ˆλ‹€.

κ·ΈλŸΌμ—λ„ λ°°μ›Œμ•Ό ν•˜λŠ” 이유

  • 객체 지ν–₯을 μœ„ν•œ λ””μžμΈ νŒ¨ν„΄μ€ SW의 μ€‘μš”ν•œ μš”μ†Œλ₯Ό ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
    • resuse, flexibility, extensibiltiy, modularity
  • λ””μžμΈ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ SW개발의 Communication에 도움이 λ©λ‹ˆλ‹€.
  • 쒋은 μ„€κ³„λŠ” 쒋은 SW, μ˜€ν”ˆμ†ŒμŠ€μ— λŒ€ν•΄ ν•™μŠ΅ν•˜κ±°λ‚˜ λ§Žμ€ κ²½ν—˜, μ—°μŠ΅μ— μ˜ν•΄ ν›ˆλ ¨λ μˆ˜ 있기 λ•Œλ¬Έμ— λ””μžμΈ νŒ¨ν„΄μ„ κ³΅λΆ€ν•¨μœΌλ‘œμ„œ 이미 증λͺ…λœ μŠ€ν‚¬κ³Ό κ²½ν—˜μ„ 배울 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 높은 결합도λ₯Ό κ°€μ§€κ±°λ‚˜ μ•Œκ³ λ¦¬μ¦˜ 쒅속성, 객체 ν‘œν˜„μ΄λ‚˜ κ΅¬ν˜„μ— μ’…μ†μ μœΌλ‘œ κ΅¬ν˜„λœ SW의 Refactoring이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • κ²°κ΅­ 쒋은 섀계λ₯Ό μœ λ„ν•˜μ—¬ SW의 μœ μ§€λ³΄μˆ˜μ— λ“€μ–΄κ°€λŠ” λΉ„μš©μ„ μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ„ μ™„μ„±ν’ˆμœΌλ‘œ 보지 말자

  • Design Pattern의 λͺ©ν‘œμ€‘ ν•˜λ‚˜λŠ” Program의 μž¬μ΄μš©μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ”κ²ƒμž…λ‹ˆλ‹€.
  • 즉, Program을 μ–΄λ–»κ²Œ ‘λΆ€ν’ˆ’으둜써 μž¬μ΄μš©ν•  수 μžˆλŠ”κ°€λ₯Ό 생각해야 ν•©λ‹ˆλ‹€.
  • λ”°λΌμ„œ Program의 예λ₯Ό ‘μ™„μ„±ν’ˆ’으둜 보지말고 μ•žμœΌλ‘œ ‘κΈ°λŠ₯을 ν™•μž₯ν•΄λ‚˜κ°€λŠ” 것’, ‘λ³€κ²½ν•  수 μžˆλŠ” 것’으둜 λ΄μ•Όν•©λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ„ 섀계 ν• λ•Œ 생각해 봐야 ν•˜λŠ” 것듀

  • μ–΄λ–€ κΈ°λŠ₯이 ν™•μž₯될 κ°€λŠ₯성이 μžˆλŠ”μ§€?
  • ν™•μž₯ κΈ°λŠ₯을 μˆ˜ν–‰ν•  λ•Œ μˆ˜μ •μ΄ ν•„μš”ν•œ ν΄λž˜μŠ€λŠ” 무엇인가?
  • μˆ˜μ •μ΄ λΆˆν•„μš”ν•œ ν΄λž˜μŠ€λŠ” 무엇인가?

λ‹€μ΄μ–΄κ·Έλž¨μ€ λ³΄λŠ” 것이 μ•„λ‹ˆλΌ μ½λŠ” 것

  • Design Pattern을 μ„€λͺ…ν•  λ•Œ Diagram을 많이 ν™œμš©ν•©λ‹ˆλ‹€.
  • 클래슀 Diagramκ³Ό Sequence Diagram을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 이것을 λ‹¨μˆœν•œ 그림으둜 μƒκ°ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. → μ΄μœ λŠ” ν•œλˆˆμ— 전체λ₯Ό λ³Ό 수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
  • Class Diagram을 λ³΄λ©΄μ„œ 각각의 μ‚¬κ°ν˜•μ„ μ‚΄νŽ΄λ³΄κ³ , κ·Έ μ•ˆμ— μ“°μ—¬μžˆλŠ” Methodκ°€ 일반 Method인지, 좔상 Method인지 확인해야 ν•©λ‹ˆλ‹€.
  • ν΄λž˜μŠ€κ°„ ν™”μ‚΄ν‘œλ₯Ό 확인, 그리고 어떀것이 λΆ€λͺ¨, μžμ‹ 클래슀 인지 확인을 ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ΄λŸ¬ν•œ κ³Όμ •μœΌλ‘œ κΌΌκΌΌν•˜κ²Œ 따져보면, Diagram의 전체적인 의미λ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

UML μ˜ˆμ‹œ

what is UML?

UML은 Unified Modeling Language의 μ•½μžλ‘œ, 톡합 λͺ¨λΈλ§ μ–Έμ–΄λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œ μ‚¬μš©λ˜λŠ” ν‘œμ€€ν™”λœ κ·Έλž˜ν”½ μ–Έμ–΄λ‘œ, μ‹œμŠ€ν…œ 및 μ†Œν”„νŠΈμ›¨μ–΄μ˜ ꡬ쑰λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

ν•œλ²ˆ 슀슀둜 예제λ₯Ό λ§Œλ“€μ–΄ λ³΄λŠ” μŠ΅κ΄€μ„ κΈ°λ₯΄κΈ°

  • λ‹¨μˆœνžˆ μ˜ˆμ‹œλ“€μ„ 읽기만 ν•˜μ§€ 말고 슀슀둜 예제λ₯Ό λ§Œλ“€μ–΄ 봐야 μ‹€λ ₯이 λŠ‘λ‹ˆλ‹€.
  • 언어도 문법을 κ³΅λΆ€ν•˜κ³ , 말(speaking)을 해보지 μ•ŠμœΌλ©΄ ν‘œν˜„λ ₯이 λŠ˜μ§€ μ•Šλ“―μ΄ 직접 μ„€κ³„ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ, Design Pattern μ μš©μ„ μ‹œλ„ν•΄ 봐야 ν•©λ‹ˆλ‹€.