Visitor ํจํด
Visitor ํจํด ์๊ฐ
Visitor ํจํด์ ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ๋์์ ๊ธฐ์กด ๊ฐ์ฒด ๊ตฌ์กฐ์ ์ถ๊ฐํ ์ ์๊ฒ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์ด ํจํด์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ SOLID ์์น ์ค ํ๋์ธ "๊ฐ๋ฐฉ-ํ์ ์์น(Open-Closed Principle, OCP)"์ ๋ฐ๋ฅด๋ฉฐ, ๊ธฐ์กด ์ฝ๋์ ์์ ์์ด ์๋ก์ด ๋์์ ์ถ๊ฐํ ์ ์๋๋ก ๋์ต๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง(์๊ณ ๋ฆฌ์ฆ)์ ๋ถ๋ฆฌํด์ผ ํ ๋ ์ ์ฉํ๋ฉฐ, ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ณด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ๋ ์์ฃผ ๋ณ๊ฒฝ๋ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
ํน์ง
- ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ๋์์ ์ถ๊ฐํ๊ธฐ ์ฝ๊ฒ ํฉ๋๋ค.
- "๊ฐ๋ฐฉ-ํ์ ์์น(OCP)"์ ์ค์ํ์ฌ ์ฝ๋ ์์ ์ ์ต์ํํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ถ๋ฆฌ๋์ด ๋ฐ์ดํฐ์ ๋ ๋ฆฝ์ฑ์ ๋์ ๋๋ค.
- ์ฌ์ฉ์์๊ฒ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ์ฝ๋์ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
์ฅ์
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์์ ํญ๋ชฉ์ ๋ถ๋ฆฌ์์ผ ์ฝ๋ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ์์ ๋์(๋ฐฉ๋ฌธ ๊ณต๊ฐ)์ ์ ์ฅ์์๋ accept()๋ก ์ธํฐํ์ด์ค๋ฅผ ํต์ผ์ํค๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์๊ฒ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋จ์
- ์๋ก์ด ์์ ๋์(๋ฐฉ๋ฌธ ๊ณต๊ฐ)์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์์ ์ฃผ์ฒด(๋ฐฉ๋ฌธ์)๋ ์ด์ ๋ํ ๋ก์ง์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
- ๋ ๊ฐ์ฒด(๋ฐฉ๋ฌธ์์ ๋ฐฉ๋ฌธ ๊ณต๊ฐ)์ ๊ฒฐํฉ๋๊ฐ ๋์์ง ์ ์์ต๋๋ค.
Visitor ํจํด UML
- Visitor ํด๋์ค: ๋ฐฉ๋ฌธ์๋ฅผ ๋ํ๋ด๋ ์ถ์ ํด๋์ค์ ๋๋ค.
- Element ์ธํฐํ์ด์ค: ๋ฐฉ๋ฌธ์๋ฅผ ๋ฐ์๋ค์ด๋ ์ธํฐํ์ด์ค๋ก, accept ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค.
- Entry ํด๋์ค: ์ถ์ ํด๋์ค๋ก ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ๋ฅผ ํํํ๋ฉฐ, Element ์ธํฐํ์ด์ค๋ฅผ ์ค์ ๊ตฌํํฉ๋๋ค.
- File ํด๋์ค: ํ์ผ์ ํํํ๋ ํด๋์ค๋ก, ์ด๋ฆ๊ณผ ํฌ๊ธฐ๋ฅผ ๋ถ์ฌํด File ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- Directory ํด๋์ค: ๋๋ ํ ๋ฆฌ๋ฅผ ํํํ๋ ํด๋์ค๋ก, ์ด๋ฆ๊ณผ ํฌ๊ธฐ๋ฅผ ๋ถ์ฌํด Directory ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ListVisitor ํด๋์ค: ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋์๋ค๋๋ฉด์ ๋ชฉ๋ก์ ํ์ํ๋ ํด๋์ค์ ๋๋ค.
Visitor ํจํด Sequence Diagram
- Main ํด๋์ค๊ฐ ListVisitor์ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- Main์ Directory์ ์ธ์คํด์ค์ ๋ํด accept ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- Directory์ ์ธ์คํด์ค๋ ์ธ์๋ก ์ ๋ฌ๋ ListVisitor์ visit(Directory) ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- ListVisitor์ ์ธ์คํด์ค๋ ๋๋ ํ ๋ฆฌ ์์ ์ดํด๋ณด๊ณ ์ฒซ ๋ฒ์งธ ํ์ผ์ accept ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- File์ ์ธ์คํด์ค๋ ์ธ์๋ก ์ ๋ฌ๋ ListVisitor์ visit(File) ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. (ListVisitor๋ ์ฌ์ ํ visit(Directory)๋ฅผ ์คํ ์ค์ ๋๋ค.)
- visit(File)์์ ๋์์ต๋๋ค.
- accept์์ ๋์์ต๋๋ค.
- ๋ค๋ฅธ File์ ์ธ์คํด์ค์ accept ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- File์ ์ธ์คํด์ค๋ visit(File)์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- ๊ฐ ๋ฉ์๋์ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๊ณ ๋ง์ง๋ง์๋ Main์ accept ๋ฉ์๋ ํธ์ถ ์ง์ ์์๋ ๋์์ต๋๋ค.
๊ฒฐ๊ณผ
- ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ visitor๊ฐ ๋์๋ค๋๋ฉฐ ํ์ผ ๋ชฉ๋ก์ ํ์ํ ๊ฒฐ๊ณผ์ ๋๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ๋์์ธํจํด - Proxy ํจํด (0) | 2024.01.18 |
---|---|
[JAVA] ๋์์ธํจํด - State ํจํด (0) | 2024.01.18 |