2μž₯

2μž₯에선 λ¬Έμ„œ νŽΈμ§‘κΈ°(lexi)λ₯Ό μ„€κ³„ν•˜λ©° λ‹€μ–‘ν•œ λ””μžμΈ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” 방법을 μ„€λͺ…ν•œλ‹€.

1. λ¬Έμ„œμ˜ 물리적 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ 볡합체 νŒ¨ν„΄

  • μš”κ΅¬ 사항

    • λ¬Έμžμ™€ κ·Έλž˜ν”½μ„ λ™μΌν•˜κ²Œ 닀루어야 ν•œλ‹€. μ„œλ‘œλ₯Ό μ„œλ‘œμ˜ νŠΉλ³„ν•œ 경우둜 μ²˜λ¦¬ν•œλ‹€λ©΄, ν…μŠ€νŠΈμ™€ 그림을 λͺ¨λ‘ μ²˜λ¦¬ν•˜λŠ” 데에 μž‘μ—…μ΄ μ€‘λ³΅λœλ‹€.

    • 단일 μš”μ†Œμ™€ κ·Έλ£Ή μš”μ†Œλ₯Ό κ΅¬λΆ„ν•΄μ„œ κ΅¬ν˜„ν•˜λ©΄ μ•ˆλœλ‹€. 예λ₯Ό λ“€λ©΄, 2μ—΄ 5번째 ν–‰ 10번째 μš”μ†Œκ°€ ν•˜λ‚˜μ˜ 문자일 μˆ˜λ„ 있고, μˆ˜λ§Žμ€ ν•˜μœ„ μš”μ†Œλ₯Ό κ°–λŠ” λ³΅μž‘ν•œ λ‹€μ΄μ–΄κ·Έλž¨μΌ μˆ˜λ„ μžˆλ‹€.

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ•Όν•˜λŠ”κ°€? : 볡합체 νŒ¨ν„΄(Composite pattern)

  • 볡합체 νŒ¨ν„΄μ΄λž€?

    • 볡합 객체 κ·Έλ£Ήκ³Ό 단일 객체λ₯Ό λ™μΌν•˜κ²Œ μ·¨κΈ‰ν•˜κ±°λ‚˜ λ‹€λ£° 수 있게 ν•΄μ£ΌλŠ” λ°©μ‹μœΌλ‘œ, μž¬κ·€μ  합성을 ν‘œν˜„ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

2. μ„œλ‘œ λ‹€λ₯Έ μ„œμ‹ μ„€μ • μ•Œκ³ λ¦¬μ¦˜μ„ μœ„ν•œ μ „λž΅ νŒ¨ν„΄

  • μš”κ΅¬ 사항

    • λ¬Έμ„œμ˜ 물리적 ꡬ쑰λ₯Ό μ μ ˆν•œ μ„œμ‹μ— 맞좰 μ„€μ •ν•΄μ€˜μ•Ό 함

    • 이 λ•Œ, 물리적 ꡬ쑰와 μ„œμ‹ μ„€μ • μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„λ¦¬λ˜μžˆμ–΄μ•Ό 함. 즉, μ„œμ‹ μ„€μ • μ•Œκ³ λ¦¬μ¦˜μ„ λ°”κΎΌλ‹€κ³  ν•΄μ„œ 물리적 ꡬ쑰가 λ³€ν•˜λ©΄ μ•ˆλ˜λ©° μ„œμ‹ μ„€μ • μ•Œκ³ λ¦¬μ¦˜μ€ μ‰½κ²Œ λ³€κ²½ν•  수 μžˆμ–΄μ•Ό 함.

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€? : μ „λž΅ νŒ¨ν„΄(Strategy Pattern)

  • μ „λž΅ νŒ¨ν„΄μ΄λž€?

    • μ‹€ν–‰ 쀑에 μ•Œκ³ λ¦¬μ¦˜μ„ 선택할 수 있게 ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄.

    • μ•Œκ³ λ¦¬μ¦˜μ„ 객체둜 μΊ‘μŠν™”ν•˜λŠ” 것이 μ „λž΅ νŒ¨ν„΄μ˜ μ˜λ„.

    • μ „λž΅κ³Ό λ™μž‘ ν™˜κ²½μ— λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μΆ©λΆ„νžˆ μΌλ°˜ν™”ν•΄μ•Όν•¨.

3. μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κΎΈλ―ΈκΈ° μœ„ν•œ μž₯μ‹μž νŒ¨ν„΄

  • μš”κ΅¬ 사항

    • 기쑴에 μ‘΄μž¬ν•˜λŠ” 글리프에 μž₯식을 μ μš©ν•΄μ•Όν•¨ (boader, μŠ€ν¬λ‘€λ°”)

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€? : 데코리이터 νŒ¨ν„΄

  • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄μ΄λž€?

    • 투λͺ…ν•œ 포함(transparent enclosure) κ°œλ…

      • 단일 μžμ‹μ— κΈ°λ°˜μ„ λ‘” ν•©μ„±κ³Ό, ν˜Έν™˜λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ κ°œλ…μ„ μ‘°ν•©ν•œ 것

    • λ§Œμ•½ μ—¬λŸ¬ 개의 μž₯식을 μ μš©ν•΄μ•Ό ν•œλ‹€λ©΄: 이미 κ°–κ³  μžˆλŠ” λ°μ½”λ ˆμ΄ν„° 클래슀λ₯Ό λ™μ‹œμ— μ μš©ν•œλ‹€.

4. μ—¬λŸ¬ 개의 룩앀필 ν‘œμ€€μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄

  • μš”κ΅¬ 사항

    • μ—¬λŸ¬ 개의 κΈ°μ‘΄ 룩앀필 ν‘œμ€€μ„ λ”°λ₯΄κ²Œ λ§Œλ“œλŠ” λ™μ‹œμ— μƒˆλ‘œμš΄ ν‘œμ€€μ΄ λ‚˜μ˜¬ λ–„λ§ˆλ‹€ μΆ”κ°€μ μœΌλ‘œ 이듀을 μ‰½κ²Œ μ§€μ›ν•˜λ €κ³  함.

    • λŸ°νƒ€μž„μ—λ„ 룩앀필을 λ³€κ²½ν•  수 μžˆλŠ”, 졜고의 μœ μ—°μ„±μ„ μ§€μ›ν•˜λŠ” 섀계λ₯Ό λ§Œλ“€μ–΄μ•Ό 함

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€? : 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄

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

    • 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 직접 λ§Œλ“€μ§€ μ•Šκ³  κ΄€λ ¨λœ μ œν’ˆ 객체의 ꡰ을 μƒμ„±ν•˜λŠ” 방버을 μ •μ˜ν•¨.

      • guiFactory->CreateScrollbar();

      • MotifFactory, PMFactory, MacFactory 등이 μ‹€μ œ κ΅¬ν˜„μ„ 맑음

    • 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ€ 동일 κ³„μ—΄μ˜ μ œν’ˆκ΅°μ„ λ‹€λ£° 수 μžˆλ‹€λŠ” μ μ—μ„œ λ‹€λ₯Έ 생성 νŒ¨ν„΄κ³Ό 닀름

      • λ‹€λ₯Έ 생성 νŒ¨ν„΄μ€ ν•œ μ’…λ₯˜μ˜ μ œν’ˆ 객체만 μƒλŒ€ν•  수 있음

    • 즉, 좔상 νŒ©ν† λ¦¬λŠ” μ—¬λŸ¬ κ°€μ§€ μ œν’ˆ group을 생성할 수 있게 λ„μ™€μ£ΌλŠ” νŒ¨ν„΄(GUIFactory->MacFactory)

5. μ—¬λŸ¬ 개의 μœˆλ„μš° ν”Œλž«νΌμ„ ν—ˆμš©ν•˜κΈ° μœ„ν•œ 가ꡐ νŒ¨ν„΄

  • μš”κ΅¬ 사턴

    • μ—¬λŸ¬ 룩앀필을 μ§€μ›ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ μœˆλ„μš° μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ 상황

    • μœˆλ„μš°λ§ˆλ‹€ μ„œλ‘œ λ‹€λ₯Έ μ—¬λŸ¬ 개의 클래슀 계측을 κ°–κ³  있고, 이 계측이 μ„œλ‘œ ν˜Έν™˜ κ°€λŠ₯ν•˜λ‹€κ³  λ³Ό 수 μ—†κΈ°λ•Œλ¬Έμ— 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄μ„ μ‚¬μš©ν•  수 μ—†μŒ.

    • ν•˜λŠ” 일은 λΉ„μŠ·ν•˜μ§€λ§Œ κ΅¬ν˜„ν•˜λŠ” 방법은 μ™„μ „νžˆ λ‹€λ₯΄λ―€λ‘œ, μœˆλ„μš°κ°€ ν•˜λŠ” 일에 λŒ€ν•œ 좔상화와 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ°©λ²•μ˜ 좔상화λ₯Ό 뢄리해야함.

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•  수 μžˆλŠ”κ°€? : 가ꡐ νŒ¨ν„΄ (Bridge Pattern)

  • 가ꡐ νŒ¨ν„΄μ΄λž€?

    • μ„œλ‘œ λ…λ¦½μ μœΌλ‘œ ν™•μž₯λ˜μ§€λ§Œ ν•¨κ»˜ λ™μž‘ν•΄μ•Ό ν•˜λŠ” κ°œλ…λ“€μ„ λ³„λ„μ˜ 클래슀 κ³„μΈ΅μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 가ꡐ νŒ¨ν„΄μ˜ λͺ©μ 

    • Windos와 WindowsImp 클래슀λ₯Ό λ”°λ‘œ λ‘”λ‹€. 그리고 WindowsImp에선 κΈ°λŠ₯의 κ΅¬ν˜„μ„ 적고 Windowsμ—μ„œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.

  • μ˜ˆμ‹œ

    1. 논리적 κ°œλ…μ— ν•΄λ‹Ήν•˜λŠ” μœˆλ„μš°,

    2. κ·Έ μœˆλ„μš°μ— λŒ€ν•œ μ„œλ‘œ λ‹€λ₯Έ 물리적 κ΅¬ν˜„

    3. 이 경우 가ꡐ νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄, μœˆλ„μš° μ‹œμŠ€ν…œμ— 쒅속적인 κ΅¬ν˜„κ³Ό μ „ν˜€ 상관없이 논리적인 μœˆλ„μš° 좔상화λ₯Ό ν™•μž₯ν•  수 있고, 좔상적 κ°œλ…κ³Ό λ¬΄κ΄€ν•˜κ²Œ μƒˆλ‘œμš΄ μœˆλ„μš° μ‹œμŠ€ν…œμ˜ κ΅¬ν˜„λ„ μΆ”κ°€ν•  수 μžˆλ‹€.

  • κ²°κ΅­

6. μ·¨μ†Œ κ°€λŠ₯ν•œ μ‚¬μš©μž 연산을 μœ„ν•œ λͺ…λ Ή νŒ¨ν„΄

  • μ‚¬μš©μž μ‘°μž‘μ„ κ΅¬ν˜„ν•˜λŠ”λ°, redo와 undo κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μ‹Άλ‹€.

  • λͺ¨λ“  μ‘°μž‘λ“€μ„ ν™•μž₯μ„± 있게 κ΅¬ν˜„ν•˜λ©΄μ„œ redo와 undo κΈ°λŠ₯을 μ œκ³΅ν•΄μ•Όν•¨.

  • 이런 경우 μ–΄λ–€ νŒ¨ν„΄μ„ μ‚¬μš©ν•  수 μžˆλŠ”κ°€? : Command Pattern

  • Command Patternμ΄λž€?

    • μš”μ²­μ„ μ–΄λ–»κ²Œ μΊ‘μŠν™”ν•˜λŠ”μ§€ μ„€λͺ…ν•˜λŠ” νŒ¨ν„΄. μš”μ²­μ„ λ°œμƒμ‹œν‚€λŠ” 데 ν•„μš”ν•œ κ· μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ·œμ •ν•΄μ€Œ

    • λͺ…λ Ή νŒ¨ν„΄μœΌλ‘œ λ§Œλ“€μ–΄μ§„ μΈν„°νŽ˜μ΄μŠ€λŠ” μš”μ²­ 처리의 κ΅¬ν˜„ λ‚΄μš©μ„ μ‚¬μš©μžμ—κ²Œ μˆ¨κΉ€.

  • μ˜ˆμ‹œ

    • Command 클래슀λ₯Ό λ§Œλ“€κ³ , μΈν„°νŽ˜μ΄μŠ€μ— Execute()와 Unexecute()λ₯Ό μΆ”κ°€ν•œλ‹€.

    • μ—¬λŸ¬ μ—°μ‚°(ex: Paste Command)을 μ„œλΈŒ 클래슀둜 λ§Œλ“€κ³ , Execute()와 Unexecute()λ₯Ό κ΅¬ν˜„ν•œλ‹€.

7. 객체 ꡬ쑰λ₯Ό μ ‘κ·Όν•˜κ³  μˆœνšŒν•˜κΈ° μœ„ν•œ 반볡μžͺ ㅐ턴

8. λ¬Έμ„œ ꡬ쑰의 κ΅¬ν˜„μ„ λ³΅μž‘ν•˜κ²Œ ν•˜μ§€ μ•Šκ³  λ‹€μˆ˜μ˜ 뢄석 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•œ 방문자 νŒ¨ν„΄

Last updated