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


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.