Java

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

HHRR 2024. 1. 18. 18:14

Proxy ํŒจํ„ด

Proxy ํŒจํ„ด ์†Œ๊ฐœ

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

Proxy ํŒจํ„ด ์‚ฌ์šฉ ์ด์œ 

  • ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ์กฐ์ ˆํ•˜๋ฉด ์„œ๋น„์Šค๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฐ ๊ฐ์ฒด๋ฅผ ๋กœ๋”ฉํ•˜๊ธฐ ์ „์— ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›๊ฒฉ ๊ฐ์ฒด๋ฅผ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›๋ณธ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ์‚ฌ์ „ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  • ๊ฐ์ฒด ์ƒ์„ฑ์— ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋นˆ๋ฒˆํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ : ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

์ด ์˜ˆ์ œ๋Š” ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ฆ๊ถŒ์‚ฌ์˜ ํ”„๋ก์‹œ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€ ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ด ์ž‘์—…์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ๊ณ ๊ฐ์„ ์œ„ํ•ด Proxy ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Proxy ํŒจํ„ด UML

  • StockService ์ธํ„ฐํŽ˜์ด์Šค
    • ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
    • getStockPrice(): ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์–ป๋Š” ๋ฉ”์†Œ๋“œ.
    • setStockPrice(): ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ.
    • print(): ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ.
  • StockServiceProxy ํด๋ž˜์Šค
    • ๋Œ€๋ฆฌ์ž ์—ญํ• ์„ ํ•˜๋Š” ํ”„๋ก์‹œ ํด๋ž˜์Šค๋กœ StockService ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•˜๊ณ  ์–ป๋Š” ์ž‘์—…์„ ํ”„๋ก์‹œ๊ฐ€ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • print() ๋ฉ”์†Œ๋“œ๋Š” ํ”„๋ก์‹œ์˜ ๊ถŒํ•œ์„ ๋„˜์–ด์„œ๋ฏ€๋กœ realService() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ณธ๋ž˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • setStockPrice(), getStockPrice()๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ Printer ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • RealStockService ํด๋ž˜์Šค
    • ์‹ค์ œ ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ๊ณต๊ธ‰์ž์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
    • ์ฃผ์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Proxy ํŒจํ„ด Sequence Diagram

  1. Main์—์„œ StockServiceProxy ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์–ป๋Š” ๊ณผ์ •์—์„œ ์ธ์Šคํ„ด์Šค์— $130 ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ $160์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.
    1. ์ด๋•Œ ์‹ค์ œ RealStockService๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  5. print()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค
  6. ์‹ค์ œ ์ถœ๋ ฅํ•  ๋•Œ๋งŒ StockServiceProxy ํด๋ž˜์Šค๊ฐ€ RealStockService ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  7. ์‹ค์ œ RealStockService์—์„œ ๋ณ€๊ฒฝ๋œ ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ๋ฐ›์•„์™€ ์ถœ๋ ฅํ•˜๊ณ , ๋‹ค์Œ ์กฐํšŒ ๋•Œ ๋ณ€๊ฒฝ๋œ ๊ฐ€๊ฒฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  8. ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

  • ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ ํ”„๋ก์‹œ๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์ œ ์ฃผ์‹ ์„œ๋น„์Šค๋Š” ์ถœ๋ ฅํ•  ๋•Œ ์ƒ์„ฑ๋˜์–ด ํšจ์œจ์ ์œผ๋กœ ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ๋””์ž์ธ ํŒจํ„ด - Visitor ํŒจํ„ด  (0) 2024.01.18
[JAVA] ๋””์ž์ธํŒจํ„ด - State ํŒจํ„ด  (0) 2024.01.18