# 2022.09.18

## 할일 및 한일

* [x] 디자인 패턴 11장(프록시 패턴) 공부 및 notion 정리(80%)

## 경험 및 배움

오늘은 낮에 공부를 마치고, 저녁에는 친구의 생일 자리가 있어 가려고 한다. 그래서 회고를 일찍 작성한다.

### 디자인 패턴 11장(프록시 패턴) notion 정리(80%)&#x20;

오늘은 디자인 패턴 11장 부분을 거의 마무리하였다.&#x20;

우선 프록시 패턴의 정의는,

{% hint style="info" %}
***프록시 패턴(Proxy Pattern)***\
**특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)를 제공한다.**
{% endhint %}

인데 RMI를 사용하여 원격 서비스로 바꾸는 기능 말고도 책에는 다른 여러 기능들이 등장하였다. 첫 번째는 **원격 프록시 인데, 원격 프록시를 써서 원격 객체로의 접근을 제어하는 역할**을 한다. 이것이 저번에 작성했던 뽑기 기계를 원격 서비스로 바꾸는 기능이다.

그리고 두 번째는 **가상 프록시(Virtual Proxy)**&#xC774;다. 가상 프록시를 써서 **생성하기 힘든 자원으로의 접근을 제어**할 수 있다. 가상 프록시는 **생성하는 데 많은 비용이 드는 객체를 대신**하고, **진짜 객체가 필요하기 전까지는 객체의 생성을 미룰 수 있다.**

이 책에서는 앨범 커버 뷰어를 만드는 예제를 제공하면서 가상 프록시의 예시를 들었다. Java의 스윙 기능을 이용해서 생성하는데, 앨범 커버를 불러오기 전에 기다리는 시간 동안 메시지를 가상 프록시를 이용하여 표시한다.

가상 프록시가 아이콘 대신 백그라운드에서 이미지를 불러오는 작업을 처리하고, 이미지를 가져오기 전까지는 메시지를 보여준다. 그 후, 이미지 로딩이 되면 아이콘 객체에게 모든 작업을 위임한다.

세 번째는 **동적 프록시를 이용한 보호 프록시(Protection Proxy)**&#xAC00; 나온다. 이 동적 프록시를 이용하면 **하나 이상의 인터페이스를 구현하여 지정한 클래스에 메소드 호출을 전달하는 프록시 클래스를 만들 수 있다.** 이 부분은 나머지 20%에 해당하므로, 내일이나 화요일에 공부를 하여 마무리해볼 생각이다.

자세한 예제 코드는 GitHub에 올려 놓았다.

{% embed url="<https://github.com/Jinwon-Dev/design-pattern/tree/main/src/Chapter11/proxy>" %}
proxy pattern code&#x20;
{% endembed %}

## 개선 및 목표&#x20;

* 정리를 하면 나중에 기록도 남고 보기도 편하고 좋지만 시간이 너무 오래걸리는 것 같다. 줄일 수 있는 방법을 찾아보자.
