λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“ŒCS/Design Pattern

[Design Pattern] ν”„λ‘μ‹œ νŒ¨ν„΄(Proxy Pattern)

by dar0m! 2021. 4. 25.

κ°œλ…

일반적으둜 μ‚¬μš©ν•˜λŠ” ν”„λ‘μ‹œλΌλŠ” μš©μ–΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ‚¬μš© λŒ€μƒ μ‚¬μ΄μ˜ λŒ€λ¦¬ 역할을 맑은 였브젝트λ₯Ό λ‘λŠ” 방법을 μ΄μΉ­ν•˜λŠ” 반면, λ””μžμΈ νŒ¨ν„΄μ—μ„œ λ§ν•˜λŠ” ν”„λ‘μ‹œ νŒ¨ν„΄μ˜μ€ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 μ€‘μ—μ„œ 타깃에 λŒ€ν•œ μ ‘κ·Ό 방법을 μ œμ–΄ν•˜λ €λŠ” λͺ©μ μ„ 가진 경우λ₯Ό 가리킨닀.

클래슀 λ‹€μ΄μ–΄κ·Έλž¨ (좜처 : https://limkydev.tistory.com/79)

ν”„λ‘μ‹œ νŒ¨ν„΄μ˜ ν”„λ‘μ‹œλŠ” νƒ€κΉƒμ˜ κΈ°λŠ₯을 ν™•μž₯ν•˜κ±°λ‚˜ μΆ”κ°€ν•˜μ§€ μ•ŠλŠ”λ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ 타깃에 μ ‘κ·Όν•˜λŠ” 방식을 λ³€κ²½ν•œλ‹€.

타깃 였브젝트λ₯Ό μƒμ„±ν•˜κΈ°κ°€ λ³΅μž‘ν•˜κ±°λ‚˜ λ‹Ήμž₯ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” κΌ­ ν•„μš”ν•œ μ‹œμ κΉŒμ§€ 였브젝트λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ” 편이 μ’‹λ‹€. 그런데 타깃 μ˜€λΈŒμ νŠΈμ— λŒ€ν•œ λ ˆνΌλŸ°μŠ€κ°€ 미리 ν•„μš”ν•  수 μžˆλ‹€. 이럴 λ•Œ ν”„λ‘μ‹œ νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄ λœλ‹€.

ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 타깃에 λŒ€ν•œ 레퍼런슀λ₯Ό λ„˜κ²¨μ•Ό ν•˜λŠ”λ°, μ‹€μ œ 타깃 였브젝트 λŒ€μ‹  ν”„λ‘μ‹œλ₯Ό λ„˜κ²¨μ€€λ‹€. 그리고 ν”„λ‘μ‹œμ˜ λ©”μ†Œλ“œλ₯Ό 톡해 타깃을 μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•˜λ©΄, κ·Έλ•Œ ν”„λ‘μ‹œκ°€ 타깃 μ˜€ν”„μ νŠΈλ₯Ό μƒμ„±ν•˜κ³  μš”μ²­μ„ μœ„μž„ν•΄μ€€λ‹€.

λ§Œμ•½ λ ˆνΌλŸ°μŠ€λŠ” κ°–κ³  μžˆμ§€λ§Œ λκΉŒμ§€ μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜, λ§Žμ€ μž‘μ—…μ΄ μ§„ν–‰λœ 후에 μ‚¬μš©λ˜λŠ” 경우라면, μ΄λ ‡κ²Œ ν”„λ‘μ‹œλ₯Ό 톡해 생성을 μ΅œλŒ€ν•œ 늦좀으둜써 μ–»λŠ” μž₯점이 λ§Žλ‹€.

  • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄κ³Ό 혼용될 수 μžˆλŠ”λ°, μ΄λŠ” λͺ©μ μ— 따라 ꡬ뢄할 수 μžˆλ‹€.
    • μ‚¬μš© λͺ©μ μ΄ κΈ°λŠ₯의 뢀가라면 λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
    • μ ‘κ·Ό μ œμ–΄λΌλ©΄ ν”„λ‘μ‹œ νŒ¨ν„΄μœΌλ‘œ ꡬ뢄할 수 μžˆλ‹€.

 

μž₯점

  • μ›λž˜ ν•˜λ €λ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©° κ·Έμ™Έμ˜ 뢀가적인 μž‘μ—…(λ‘œκΉ…, 인증, λ„€νŠΈμ›Œν¬ 톡신 λ“±)을 μˆ˜ν–‰ν•˜κΈ°μ— μ’‹λ‹€.
  • λΉ„μš©μ΄ 많이 λ“œλŠ” μ—°μ‚°(DB 쿼리, λŒ€μš©λŸ‰ ν…μŠ€νŠΈ 파일 λ“±)을 μ‹€μ œλ‘œ ν•„μš”ν•œ μ‹œμ μ— μˆ˜ν–‰ν•  수 μžˆλ‹€.
  • μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” ν”„λ‘μ‹œ κ°μ²΄λ‚˜ μ‹€μ œ κ°μ²΄λ‚˜ μ‚¬μš©λ²•μ€ μœ μ‚¬ν•˜λ―€λ‘œ μ‚¬μš©μ„±μ΄ μ’‹λ‹€.

 

μ’…λ₯˜

λŒ€ν‘œμ μΈ 2가지

  1. 가상 ν”„λ‘μ‹œ
    • μ‹€μ œ 객체의 μ‚¬μš© μ‹œμ  μ œμ–΄
    • ex) λŠ¦μ€ μ΄ˆκΈ°ν™”
  2. 보호 ν”„λ‘μ‹œ
    • ν”„λ‘μ‹œ 객체가 μ‚¬μš©μžμ˜ μ‹€μ œ 객체에 λŒ€ν•œ 접근을 μ œμ–΄
    • ex) 직책별 데이터 μ ‘κ·Ό

(μžμ„Έν•œ 예)

 

ν”„λ‘μ‹œ νŒ¨ν„΄(Proxy Pattern) :: JDM's Blog

ν”„λ‘μ‹œ νŒ¨ν„΄ μ •μ˜ μ‹€μ œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 객체Real Object λŒ€μ‹  κ°€μƒμ˜ 객체Proxy Objectλ₯Ό μ‚¬μš©ν•΄ 둜직의 흐름을 μ œμ–΄ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. ν”„λ‘μ‹œ νŒ¨ν„΄ νŠΉμ§• μ›λž˜ ν•˜λ €λ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©° κ·Έμ™Έμ˜

jdm.kr

 

μ°Έκ³ 

 

'πŸ“ŒCS > Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Design Pattern] μ–΄λŒ‘ν„° νŒ¨ν„΄(Adapter Pattern)  (0) 2021.05.02

λŒ“κΈ€