어댑터?

  • 국산 플러그와 유럽식 소켓사이에서 국산 전원 플러그를 유럽식 소켓에 꽂을 수 있게 해주는 역할을 해주는 것.

어댑터 패턴(Adapter Pattern)의 정의

  • 한 클래스(어떤)의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어탭터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.
  • 어댑터는 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 합니다.

어댑터패턴 예제

  • 어댑티? -> 어댑터를 가운데 두고, 클라이언트와 정반대 위치에 있는것을 어댑티라고 부름.

어탭터의 종류

  • 객체 어댑터
  • 객체 어댑터
  • 구성을 사용.
  • Adaptee 뿐만 아니라 그 서브 클래스에 대해서도 어댑터 역할을 할 수 있다는 장점이 있다.

  • 클래스 어댑터
  • 특정 어댑티 클래스에만 제공
  • 어댑티 전체를 다시 구현하지 않아도 된다는 장점이있다.
  • 서브클래스기 때문에 어댑티의 행동을 오버라이드할 수 있는 장점이있다.
  • 다중 상속을 이용하여야 하기 때문에 자바에서는 사용할 수가 없다.

퍼사드 패턴?

  • 집에있는 홈시어터 로 영화를 보기위해서는 팝콘기계를 켠다 -> 팝콘튀기기 시작 -> 전등을 어둡게 조절 -> 스크린을 내린다 -> 프로제거를 켠다 ……..
  • 이복잡한 과정을 하나의 인터페이스에 필요한 기능만 묶어 HomeTheaterFacade Interface(통합 인터페이스)의 watchMovice() 메서드로 영화볼 때의 기능만을 묶을 수 있다.

퍼사드 패턴의 정의

  • 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용 할 수 있습니다.
  • 단순화된 인터페이스를 제공하면서도, 클라이언트에서 필요로 한다면 시스템의 모든 기능을 사용 할수 있도록 해준다.

어댑터/파사드 패턴의 차이점

  • 어댑터패턴은 인터페이스를 변경해서 클라이언트에서 필요로 하는 인터페이스로 적응시키기위한 용도로 사용되며, 퍼사드 패턴은 어떤 서브시스템에 대한 간단한 인터페이스를 제공하기 위한용도로 쓰인다.

디자인 원칙

  • 최소 지식 원칙 - 정말 친한 친구하고만 얘기하라.
  • 시스템을 디자인할 때, 어떤 객체든 그객체와 상호작용을 하는 클래스의 개수에 주의해야하며, 그런 객체들과 어떤 식으로 상호작용을 하는지에도 주의를 기울이라는 뜻
  • 이 원칙을 잘 따르면 여러 클래스들이 복잡하게 얽혀서 시스템의 한부분을 변경했을 때 다른 부분까지 줄질이 고쳐야 되는 상활을 미리 방지할 수 있다.

위 원칙을 지키기위한 가이드라인

  • 객체 자체
  • 메소드에 매개변수로 전달된 객체
  • 그 메소드에서 생성하거나 인스턴스를 만든객체
  • 그 객체에 속하는 구성요소

원칙을 따르지 않는경우

public float getTemp(){
    Thermometer thermometer = station.getThermometer();
    return thermometer.getTemperature();
}
  • station으로부터 thermometer라는 객체를 받은 다음, 그 객체의 getTemperature 메소드를 직접호출하고있다.

    원칙을 따르는 경우

public float getTemp(){
    return station.getTemperature();
}
  • 최소 지식 원칙을 적용하여 Station 클래스에 thermometer에 요청을 해주는 메소드를 추가하여 의존해야 하는 클래스의 개수를 줄였다.