๐ 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์ฐจ ๋์คํจ์น๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผํจ)
-> ex) ํจ๋์์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด Device์ ๊ตฌํ์ฒด๋ก ๋ง๋ค๋ฉด ๋!
- ์ถ๊ฐ ๊ธฐ๋ฅ์ ํ ๊ณณ์ ๋ชจ์๋ ์ ์๋ค.
โข ๋จ์
- ์๋ก์ด Element ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ๋ ๋ชจ๋ Visitor ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
- visit ๋ฉ์๋์ return ํ์
์ ๊ฐ๊ฐ ํ์
ํ๊ณ ์์ด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ)
https://thalals.tistory.com/402 - ํ์ฐจ๊ฒ, ์ด์ฌํ ๊ณต๋์