๋ชฉ๋ก์ „์ฒด ๊ธ€ (162)

EEALL@ONCE

๐Ÿ”ฆMVVM (Model-View-ViewModel) ํŒจํ„ด์ด ๋ญ”๋ฐ?

'๋ชจ๋ธ(Model)'์€ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ฌ๋ณผ๋กœ ํ‘œํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. '๋ทฐ(View)'๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, ํ™”๋ฉด๊ณผ ๋ฒ„ํŠผ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. '๋ทฐ๋ชจ๋ธ(ViewModel)'์€ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ™”์‚ดํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. MVVM (Model-View-ViewModel) ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ(Separation of Concerns): MVVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ, ๋ทฐ, ๋ทฐ๋ชจ๋ธ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐ ๋ถ€๋ถ„์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ , ๋ณ€๊ฒฝ๋  ๋•Œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๋””์ž์ธ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๋กœ์ง์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ..

๐Ÿ”ฆ๋…ธ์ถœ๋ชจ๋“ˆํŒจํ„ด์ด ๋ญ”๋ฐ?

๋…ธ์ถœ ๋ชจ๋“ˆ ํŒจํ„ด(Revealing Module Pattern)์€ JavaScript์˜ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(IIFE)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰์„ฑ๊ณผ ์บก์Šํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ์€๋‹‰์„ฑ(Encapsulation): ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๊ณต๊ฐœ ์ƒํƒœ์ด๋ฉฐ, ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ ์ธํ„ฐํŽ˜์ด์Šค(Exposure): ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋งŒ์„ ์„ ํƒ์ ์œผ๋กœ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ: ๋ชจ๋“ˆ์€ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋‚ด๋ถ€ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœํ•  ๋ฉค๋ฒ„๋Š” ๋ฐ˜ํ™˜ ๊ฐ์ฒด์— ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค var myModule = (function() { // ๋น„๊ณต๊ฐœ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ var private..

๐Ÿ”ฆ์ดํ„ฐ๋ ˆ์ดํ„ฐ(iterator)๊ฐ€ ๋ญ”๋ฐ? +์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด

์ดํ„ฐ๋ ˆ์ดํ„ฐ(iterator)๋Š” ์ปฌ๋ ‰์…˜, ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์ŠคํŠธ๋‚˜ ์„ธํŠธ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋‚ด์˜ ์š”์†Œ๋“ค์„ ์ˆœํšŒํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ์ฐจ๋ก€๋Œ€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” Iterator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: hasNext(): ์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ๋” ์ด์ƒ ์ˆœํšŒํ•  ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด true๋ฅผ, ์—†๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. next(): ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: List list = Arrays.asList("apple", "banana", "cherry"); Iterator iterator = list.iterator(); while (iterato..

๐Ÿ”ฆDNS ๊ฐ€ ๋ญ”๋ฐ?

์ด ๊ทธ๋ฆผ์€ DNS(Domain Name System, ๋„๋ฉ”์ธ ์ด๋ฆ„ ์‹œ์Šคํ…œ) ๊ฐœ๋…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํฐ ๋„์‹œ์—์„œ ํ•œ ์‚ฌ๋žŒ์ด ํŠน์ • ์ง‘(์›น์‚ฌ์ดํŠธ๋ฅผ ์ƒ์ง•)์œผ๋กœ ๊ฐ€๋Š” ๋ฐฉํ–ฅ์„ ๋ฌป๊ณ  ์žˆ๋Š” ์žฅ๋ฉด์„ ๋ฌ˜์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ๋‚ดํŒ ๋˜๋Š” ์ •๋ณด ๋ณด๋“œ(‘DNS’๋กœ ๋ผ๋ฒจ๋ง ๋จ)๊ฐ€ ์ง€๋„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ ์ง€๋„์—์„œ ์ง‘์˜ ์œ„์น˜๋ฅผ ์ฃผ์†Œ(์›น์‚ฌ์ดํŠธ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ƒ์ง•)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” DNS๊ฐ€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„(์˜ˆ: ‘www.example.com’)์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์ƒ์ง•ํ•ฉ๋‹ˆ๋‹ค. DNS๋Š” ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ์„ ์˜ฌ๋ฐ”๋ฅธ ์›น์‚ฌ์ดํŠธ๋กœ ์•ˆ๋‚ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋„์‹œ ๋‚ด์—์„œ ํŠน์ • ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด, DNS๋Š” ์ธํ„ฐ๋„ท์—์„œ ํŠน์ • ์›น์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค..

๐Ÿ”ฆORIGIN(์˜ค๋ฆฌ์ง„)์ด ๋ญ”๋ฐ?

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

๐Ÿ”ฆCORS๊ฐ€ ๋ญ”๋ฐ? : ํ•œ ๋ฌธ์œผ๋กœ๋งŒ ๋“ค์–ด๊ฐ€

์ด ๊ทธ๋ฆผ์€ CORS(Cross-Origin Resource Sharing, ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ) ๊ฐœ๋…์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์„ ๋ณ„๋„์˜ ์„ฌ์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€์œผ๋ฉฐ, ํ•œ ์„ฌ์—๋Š” ์›น ์„œ๋ฒ„๊ฐ€, ๋‹ค๋ฅธ ์„ฌ์—๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ์„ฌ ์‚ฌ์ด์—๋Š” CORS๋ฅผ ์ƒ์ง•ํ•˜๋Š” ๋‹ค๋ฆฌ๊ฐ€ ๊ทธ๋ ค์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์„ฌ์˜ ์›น ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. '์ ‘๊ทผ ๋ถˆ๊ฐ€' ํ‘œ์ง€ํŒ์ด '์ ‘๊ทผ ํ—ˆ์šฉ'์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๋ชจ์Šต์„ ํ†ตํ•ด CORS๊ฐ€ ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์—ญํ• ์„ ๊ฐ•์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. CORS(Cross-Origin Resource Sharing)๋Š” ์›น ํŽ˜์ด์ง€๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์›น์—์„œ๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋™์ผ..

๐Ÿ”ฆ CDN(Content Delivery Network, ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ) ์„œ๋น„์Šค๋ž€?

CDN(Content Delivery Network, ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ) ์„œ๋น„์Šค์˜ ๊ฐœ๋…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฆผ์—์„œ๋Š” ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ์ „ ์„ธ๊ณ„์— ๋ถ„์‚ฐ๋œ ์—ฌ๋Ÿฌ ๋กœ์ปฌ ์„œ๋ฒ„๋“ค๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ๋กœ์ปฌ ์„œ๋ฒ„์—๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅธ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜ํ…์ธ ์˜ ๋ณต์‚ฌ๋ณธ์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์„œ์šธ์— ์žˆ๋Š” ์ปคํ”ผ์ˆ์ด ์ „ ์„ธ๊ณ„์— ์œ ๋ช…ํ•œ๋ฐ, ์ปคํ”ผ๋ฅผ ๋งˆ์‹œ๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์„œ์šธ๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ์ด ๊ฒฝ์šฐ, ์„œ์šธ๊นŒ์ง€ ๊ฐ€๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ์ปคํ”ผ์ˆ์€ ๋งค์šฐ ๋ถ๋นŒ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ธํ„ฐ๋„ท์—์„œ ํ•˜๋‚˜์˜ ์ค‘์•™ ์„œ๋ฒ„๋งŒ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ, ์ปคํ”ผ์ˆ์ด ์ „ ์„ธ๊ณ„ ๊ณณ๊ณณ์— ๋ถ„์ ์„ ์—ด์–ด ๊ฐ™์€ ํ’ˆ์งˆ์˜ ์ปคํ”ผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์„ธ์š”. ์‚ฌ๋žŒ๋“ค์€ ๊ฐ€๊นŒ์šด ๋ถ„์ ์„ ๋ฐฉ๋ฌธํ•˜์—ฌ ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์ปค..

๐Ÿ”ฆ ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ๋ญ”๋ฐ? - ์˜ต์ €๋ฒ„ ํŒจํ„ด์— ์‚ฌ์šฉ

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