어댑터 패턴과 프록시 패턴의 차이점은 무엇입니까?


33

이해하는 한, 어댑터 패턴 은 우리의 실제 관심 객체에 대한 래퍼 객체를 작성하는데, 이는 한 단계 더 간접적 인 수준으로 유연성을 제공합니다. 유연성은 실제 객체의 인터페이스가 변경되면 실제 객체를 가리키는 래퍼 인터페이스를 변경하여 클라이언트 측 노출 인터페이스를 변경하지 않는다는 점입니다.

프록시 패턴은 모든 프록시 래퍼는 실제 개체의 기능의 일관된 부분 집합을 제공하는 차이와 동일합니다. 우리가 "한 목적을위한 하나의 수업"을 만들려고 노력할 때 이것이 왜 유용한가?

이것을 올바르게 입수 했습니까?

답변:


55

전체는 아니고.

어댑터 패턴 의 기본 목적은 클래스 / 라이브러리 A의 인터페이스를 클라이언트 B의 예상으로 변경하는 것입니다. 일반적인 구현은 랩퍼 클래스 또는 클래스 세트입니다. 미래의 인터페이스 변경을 용이하게하는 것이 아니라 현재 인터페이스 비 호환성을 목적으로합니다.

프록시 패턴은 또한 래퍼 클래스를 사용하지만 다른 목적을 위해. 프록시 패턴의 목적은 실제 자원에 대한 독립형을 작성하는 것입니다. 프록시를 사용하는 이유는 다음과 같습니다.

  • 실제 리소스는 원격 컴퓨터에 상주합니다 (프록시는 원격 리소스와의 상호 작용을 용이하게합니다)
  • 실제 자원은 작성하는 데 비용이 많이 듭니다 (프록시는 실제로 필요한 경우가 아니면 비용이 발생하지 않도록합니다)

가장 중요한 것은 프록시가 스탠드 인 인 실제 리소스를 대체 할 수있는 교체를 제공하므로 동일한 인터페이스를 제공해야한다는 것입니다.


우선 큰 답변을 주셔서 감사합니다. 프록시는 현재 클라이언트에 필요한 모든 인터페이스를 구현합니까, 아니면 실제 자원이 제공하는 모든 인터페이스를 구현합니까?
— Vorac

1
@Vorac : 인터페이스의 복잡성과 디자인 철학에 따라 다릅니다. 둘 다 가능하지만 인터페이스가 크거나 복잡한 경우 또는 YAGNI를 강하게 믿는다면 필요한 것만 구현하는 것이 더 합리적입니다.
— Bart van Ingen Schenau 2016 년

따라서 어댑터 패턴이 랩퍼 클래스를 사용한다는 점에서 어댑터 패턴은 프록시 패턴입니까?
— moonman239

@ moonman239 : 아니오, 랩퍼 클래스 사용 의도가 다르기 때문에 아니오. 클래스 다이어그램에서 두 패턴이 비슷해 보인다고해서 서로 관련되어 있거나 구현되어 있다는 의미는 아닙니다. 패턴이 다른 주요 요인은 의도입니다.
— Bart van Ingen Schenau

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.