Java 3

[JAVA] ๋””์ž์ธ ํŒจํ„ด - Visitor ํŒจํ„ด

Visitor ํŒจํ„ด Visitor ํŒจํ„ด ์†Œ๊ฐœ Visitor ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋™์ž‘์„ ๊ธฐ์กด ๊ฐ์ฒด ๊ตฌ์กฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ SOLID ์›์น™ ์ค‘ ํ•˜๋‚˜์ธ "๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open-Closed Principle, OCP)"์„ ๋”ฐ๋ฅด๋ฉฐ, ๊ธฐ์กด ์ฝ”๋“œ์˜ ์ˆ˜์ • ์—†์ด ์ƒˆ๋กœ์šด ๋™์ž‘์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง(์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ณด๋‹ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ์ž์ฃผ ๋ณ€๊ฒฝ๋  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠน์ง• ๊ฐ์ฒด์˜ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋™์ž‘์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. "๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)"์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ฝ”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ถ„๋ฆฌ๋˜์–ด ๋ฐ์ดํ„ฐ์˜ ๋…..

Java 2024.01.18

[JAVA] ๋””์ž์ธํŒจํ„ด - Proxy ํŒจํ„ด

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

Java 2024.01.18

[JAVA] ๋””์ž์ธํŒจํ„ด - State ํŒจํ„ด

State ํŒจํ„ด State ํŒจํ„ด ์†Œ๊ฐœ State ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ์ฒด์˜ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ƒํƒœ ์ „์ด๋ฅผ ์บก์Šํ™”ํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ด์œ  ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ–‰๋™์„ ํ•ด์•ผ ํ•  ๋•Œ State ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ์žฅ์  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์ƒํƒœ ์ „์ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์  ์ƒํƒœ ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํด๋ž˜์Šค์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ : ์€ํ–‰ ๊ณ„์ขŒ ์ƒํƒœ ๊ด€๋ฆฌ ์ด ์˜ˆ์ œ๋Š” ์€ํ–‰ ๊ณ„์ขŒ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณ„์ขŒ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์—ด๋ฆฐ ์ƒํƒœ (Open State): ์ž…๊ธˆ๊ณผ ..

Java 2024.01.18