<aside>

</aside>


🌟 챕터 μ†Œκ°œ

μ•ˆλ…•ν•˜μ„Έμš”, μ—¬λŸ¬λΆ„! 😊 μ˜€λŠ˜μ€ 행동 νŒ¨ν„΄ 쀑 μ•½κ°„ κΉŒλ‹€λ‘­μ§€λ§Œ 맀우 κ°•λ ₯ν•œ **방문자 νŒ¨ν„΄(Visitor Pattern)**에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³΅μž‘ν•œ 객체 ꡬ쑰(예: λ¬Έμ„œ, ν”„λ‘œκ·Έλž¨ μ½”λ“œ 트리) μœ„μ—μ„œ HTML 내보내기, λ§žμΆ€λ²• 검사 λ“± λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μƒˆλ‘œμš΄ μž‘μ—…μ„ μΆ”κ°€ν•˜κ³  μ‹Άλ‹€κ³  상상해 λ³΄μ„Έμš”. πŸ“„βž‘οΈπŸ’» 방문자 νŒ¨ν„΄μ€ 마치 **μ „λ¬Έκ°€(Visitor)**κ°€ λ³΅μž‘ν•œ ꡬ쑰물의 각 뢀뢄을 **'λ°©λ¬Έ'**ν•˜λ©΄μ„œ μžμ‹ λ§Œμ˜ 전문적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. 객체 κ΅¬μ‘°λŠ” κ·ΈλŒ€λ‘œ λ‘” 채, μƒˆλ‘œμš΄ μž‘μ—…(Visitor)을 μ‰½κ²Œ μΆ”κ°€ν•  수 있게 ν•΄μ£ΌλŠ” λ†€λΌμš΄ νŒ¨ν„΄μ΄μ£ ! μ°¨κ·Όμ°¨κ·Ό ν•¨κ»˜ μ•Œμ•„λ΄…μ‹œλ‹€! πŸ˜‰


🎯 챕터 λͺ©ν‘œ

이번 κ°•μ˜μ˜ λͺ©ν‘œμž…λ‹ˆλ‹€.

  1. 방문자 νŒ¨ν„΄μ˜ μ˜λ„(객체 κ΅¬μ‘°μ—μ„œ 연산을 λΆ„λ¦¬ν•˜μ—¬, μš”μ†Œ 클래슀λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ μƒˆλ‘œμš΄ μ—°μ‚° μΆ”κ°€)λ₯Ό μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. 이 νŒ¨ν„΄μ΄ ν•΄κ²°ν•˜λŠ” 문제(κΈ°μ‘΄ 클래슀 λ³€κ²½ 없이 λ³΅μž‘ν•œ 객체 ꡬ쑰에 μƒˆλ‘œμš΄ μ—°μ‚° μΆ”κ°€)λ₯Ό 식별할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ£Όμš” μ°Έμ—¬μž(Visitor, ConcreteVisitor, Element, ConcreteElement λ“±)와 각자의 역할을 μ΄ν•΄ν•©λ‹ˆλ‹€.
  4. 핡심 λ©”μ»€λ‹ˆμ¦˜μΈ **더블 λ””μŠ€νŒ¨μΉ˜(Double Dispatch)**κ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. Pythonμ—μ„œ 방문자 νŒ¨ν„΄μ„ κ΅¬ν˜„ν•˜κ³  ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  6. νŒ¨ν„΄μ˜ μž₯점(μƒˆλ‘œμš΄ μ—°μ‚° μΆ”κ°€ 용이)κ³Ό 단점(μƒˆλ‘œμš΄ Element νƒ€μž… μΆ”κ°€ 어렀움)을 μ΄ν•΄ν•©λ‹ˆλ‹€.

πŸ’» κ°•μ˜μ—μ„œ μ‚¬μš©λ˜λŠ” 전체 μ½”λ“œ 및 ν”„λ‘œμ νŠΈ ꡬ쑰

컴파일러의 좔상 ꡬ문 트리(AST) 예제λ₯Ό 톡해, μˆ˜μ‹μ„ λ‚˜νƒ€λ‚΄λŠ” 트리 ꡬ쑰λ₯Ό λ§Œλ“€κ³ , 이 트리λ₯Ό μˆœνšŒν•˜λ©° 식을 κ³„μ‚°ν•˜λŠ” λ°©λ¬Έμžμ™€ 식을 λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•˜λŠ” 방문자λ₯Ό κ΅¬ν˜„ν•΄ λ΄…λ‹ˆλ‹€. λͺ¨λ“  μ½”λ“œλŠ” visitor_example.py 파일 ν•˜λ‚˜μ— λ‹΄κ² μŠ΅λ‹ˆλ‹€.