๐Ÿ“Œ[๋””์ž์ธ ํŒจํ„ด] ๋ฐฉ๋ฌธ์ž (Visitor)

๋ชจ๊น…ยท2023๋…„ 10์›” 30์ผ
0

๐Ÿ“– 01. Visitor๋ž€?

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•˜๋Š” ํŒจํ„ด

  • ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ธฐ์กด์— ํด๋ž˜์Šค์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿด ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ์กด์žฌํ•œ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด SRP๋ฅผ ์ง€ํ‚ค๊ณ  ์‹ถ์–ด์„œ ๋” ์ด์ƒ ์ด ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฑ…์ž„์„ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํ˜น์€ ๋น„์Šทํ•œ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ์ƒ๊ฒจ ํ•œ๊ณณ์œผ๋กœ ๋ชจ์•„๋†“๊ณ  ์‹ถ์„ ๋•Œ visitor ํŒจํ„ด์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– 02. Visitor ํŒจํ„ด ์˜ˆ์‹œ

01. Visitor ํŒจํ„ด ์‚ฌ์šฉ ์ „

  • ๊ธฐ์กด Shape๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋””๋ฐ”์ด์Šค ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

  • ๊ณผ์—ฐ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด Shape์˜ ์—ญํ• ์ผ๊นŒ?
    -> SRP๊ฐ€ ๊นจ์กŒ๋‹ค๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋งŒ์•ฝ Shape ์ด๋‚˜ Device๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๋Š˜์–ด๋‚œ๋‹ค.
    -> ๋˜ํ•œ Device๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๊ธฐ์กด Shape ๊ตฌํ˜„์ฒด์˜ ์ฝ”๋“œ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋ฉด ์ƒˆ๋กœ์šด Shape ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ๊ฑฐ๋Œ€ํ•œ if๋ฌธ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ๋‹ค.
    -> ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?


-> ๋ฉ”์†Œ๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜์ง€๋งŒ ์‹ค์ˆ˜ ํ•  ํ™•๋ฅ ์€ ์ค„์–ด๋“ ๋‹ค!
๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ผ๊นŒ?
(cf, ์บก์ณ ํ•œ๋ฒˆ์— ํ•˜๋ ค๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์— class๋ฅผ ์ž ์‹œ ์˜ฎ๊ฒจ๋‘” ๊ฒƒ์ด๋‹ค. ์˜ค๋ฅ˜ X)

  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ž…์„ ์ง€์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋” ํ•œ๋‹ค.
    -> ์ฆ‰, ์Šคํƒœํ‹ฑํ•œ ๋งตํ•‘์„ ํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์ฒดํฌํ•˜์ง€ ์•Š๊ณ  ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ํŠน์ • ๊ตฌํ˜„์ฒด๋กœ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์กด ์ฝ”๋“œ์— ์†๋Œ€์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
    -> ๊ธฐ๋Šฅ์„ Device(Visitor)์— ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

Visitor ํŒจํ„ด

  • visitor ํŒจํ„ด์€ ๋”๋ธ” ๋””์ŠคํŒจ์น˜(Dispatch)๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

  • ๋””์ŠคํŒจ์น˜๊ฐ€ ๋ญ์•ผ?
    -> ์–ด๋–ค ๋‹คํ˜•์„ฑ์ด๋‚˜ ๋ถ„๋ฐฐ, ๋ฐฐ์น˜ ์–ด๋–ค ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ฒ˜๋ฆฌํ•  ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค, ๊ตฌ์ฒด์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„์„œ ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์„ Dispatch๋ผ๊ณ  ํ•œ๋‹ค.

  • ์–ธ์ œ ๋”๋ธ” ๋””์ŠคํŒจ์น˜์•ผ?
    1. ํด๋ผ์ด์–ธํŠธ์—์„œ Element(Shape)์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ณ  ์žˆ๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ ๊ตฌ์ฒดํ™”๋œ ํด๋ž˜์Šค๋ฅผ ๋ชจ๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ํ•˜์œ„ ํด๋ž˜์Šค์™€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •
    2. ๊ตฌ์ฒดํ™” ๋œ ํด๋ž˜์Šค์—์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์—ฌ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ๋ชจ๋ฅธ ์ƒํƒœ์—์„œ ๊ทธ ํด๋ž˜์Šค๋ฅผ ์ฐพ๋Š” ๊ณผ์ •

  • Element๋Š” ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    -> accept๋Š” ์ถ”๊ฐ€ ํ•ด์•ผ ํ•œ๋‹ค.

02. Visitor ํŒจํ„ด ์‚ฌ์šฉ ํ›„

  • ์ด์ œ ๋น„์ง€ํ„ฐ ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฝ”๋“œ์˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•ด ๋ณด๋„๋ก ํ•˜์ž.
  • ๋ฐฉ๋ฌธ์ž ํŒจํ„ด์˜ ํ•ต์‹ฌ์€ ๋”๋ธ” ๋””์ŠคํŒจ์น˜. ๊ธฐ์กด์˜ Shape ๊ตฌํ˜„์ฒด์—์„œ ์ผ์–ด๋‚˜๋˜ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ Device ์—๊ฒŒ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๊ฒƒ์ด๋‹ค.

๐Ÿ“– 03. Visitor ํŒจํ„ด ์žฅ๋‹จ์ 

โ€ข ์žฅ์ 

  1. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (1์ฐจ ๋””์ŠคํŒจ์น˜๊ธฐ๋Šฅ์€ ์ถ”๊ฐ€ํ•ด์•ผํ•จ)
    -> ex) ํŒจ๋“œ์—์„œ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Device์˜ ๊ตฌํ˜„์ฒด๋กœ ๋งŒ๋“ค๋ฉด ๋!
  2. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

โ€ข ๋‹จ์ 

  1. ์ƒˆ๋กœ์šด Element ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๋•Œ ๋ชจ๋“  Visitor ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
  2. visit ๋ฉ”์†Œ๋“œ์˜ return ํƒ€์ž…์„ ๊ฐ๊ฐ ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.





์ฐธ๊ณ  ์ž๋ฃŒ)
https://thalals.tistory.com/402 - ํž˜์ฐจ๊ฒŒ, ์—ด์‹ฌํžˆ ๊ณต๋Œ€์ƒ

profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€