관리 메뉴

caLAB

[개발] Structual Design Pattern - Adapter Pattern, Proxy Pattern 본문

개발 공부/컴퓨터 과학

[개발] Structual Design Pattern - Adapter Pattern, Proxy Pattern

도이(doi) 2022. 4. 25. 20:01
728x90

구조 패턴은 생성 패턴과 달리 클래스 구조를 확장하기 위한 관점으로 설계된 패턴 모음입니다. 

Adapter 패턴

하나의 인터페이스를 다른 인터페이스로 전환

어댑터 패턴은 인터페이스를 추상화하여 서로 다른 인터페이스를 통일화 합니다. 어댑터 패턴은 코드를 재사용하기 위해 구조를 변경하는 패턴입니다. 어댑터 패턴은 다른 말로 래퍼 패턴이라고 합니다. 기존의 클래스를 새로운 클래스로 감싸는 기법입니다. 래퍼 처리로 기존의 기능은 유지하면서 변경된 추가 코드를 삽입합니다. 래퍼 처리된 객체를 어댑터라고 합니다. 

 

어댑터 패턴은 오래된 레거시 코드나 라이브러리를 재사용할 때 유용한 패턴입니다. 또한 어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 코드를 결합하여 응용 프로그램에서 동작할 수 있도록 도와줍니다.

Fish의 swim 인터페이스를 FishAdapter의 walk를 통해서 불러냄

맞지 않는 기존의 인터페이스를 현재 코드에 맞게 변환시켜 줌

Proxy 패턴

객체의 접근을 제한할 수 있습니다. 객체를 액세스할 때 추가적인 책임을 부여하는 역할을 수행합니다.

프록시 패턴은 객체 접근을 제어하기 위해 중간 단계에 대리자를 위치시키는 패턴입니다. 

프록시의 특징은 하나의 객체를 두 개로 나누어 재구성한다는 것입니다. 분리하는 이유는 직접적인 접근을 막고 대리할 객체를 구현하기 위해서입니다. 프록시에서 분리된 두 개의 객체는 서로 다른 객체가 아닙니다. 두 객체는 동일한 인터페이스 규격을 갖고 있으며, 프록시는 단지 객체의 접근과 동작을 제어하기 위한 중간 제어 구조가 추가된 객체일 뿐입니다.

클라이언트가 object의 어떠한 기능을 실행시키고 싶을 때 proxy에서 사전에 argument를 확인하고 log 혹은 cache로 가지고 있는 일을 한다.

기존의 object인터페이스(Cat class)와 proxy인터페이스(CatProxy class)가 같아야 된다.

Cat 인터페이스와 CatProxy 인터페이스 양쪽에 speak() 함수가 존재해야 됨

따라서 Cat에서 상속을 받는 형태로 구현 가능함

proxy클래스를 원래 클래스에 상속을 받는 형태로 구현

 

고양이 클래스의 인터페이스 클래스인 animal에서 proxy가 상속을 받는 식의 구조

어댑터 패턴 VS 프록시 패턴

두 개의 객체를 이어준다는 역할적인 측면에서 두 패턴은 서로 유사합니다. 어댑터 패턴은 서로 다른 인터페이스를 맞춰주는 반면, 프록시는 투과적 특성으로 동일한 인터페이스를 유지합니다. 프록시 패턴은 객체를 분리하는 역할을 하고, 원격 프록시는 분리된 객체에 투과적 특성을 결합해 객체의 연결을 제어합니다.

728x90
반응형
Comments