😐2022.08.16

일일 회고 6일차

할일 및 한일

경험 및 배움

디자인 패턴 7장(어댑터 패턴과 퍼사드 패턴)

오늘은 저번에 정리하였던 디자인 패턴 7장(어댑터 패턴과 퍼사드 패턴)을 복습하고, 세미나 참석을 위해 준비하였다.

어댑터 패턴, 그리고 퍼사드 패턴에 대해 알아보았다.

어댑터 패턴

특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다.

인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다.

어댑터 패턴을 쓰면 몇 가지 장점들이 있다.

  • 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다.

  • 클라이언트와 구현된 인터페이스를 분리할 수 있다.

  • 변경 내역이 어댑터에 캡슐화 되기 때문에 인터페이스가 바뀌더라도 클라이언트를 바꿀 필요가 없다.

어댑터 패턴은 '객체 어댑터''클래스 어댑터'가 있다.

하지만 Java에서는 다중 상속을 지원하지 않기 때문에 클래스 어댑터는 사용할 수 없다. 자바에서의 다중 상속 문제, 일명 다이아몬드 문제라고 불리는 문제는 시간이 나면 다시 자세하게 알아볼 생각이다.

객체 어댑터는 구성을 활용하고, 클래스 어댑터는 상속을 활용하는 등 여러 차이가 있다. 자세한 내용이나 코드 예시은 노션 정리 링크에서 볼 수 있다.

다음은 퍼사드 패턴의 정의이다.

퍼사드 패턴

서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 준다.

또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있다.

쉽게 이야기 하면 퍼사드 패턴은 일련의 객체를 감싸서 단순하게 하는 용도로 쓰인다.

여기서 하나 더 중요한 원칙이 등장하는데, 그것이 데메테르 원칙이라고도 불리는 최소 지식 원(Principle of Least Knowledge)이다.

최소 지식 원칙 시스템을 디자인할 때 어떤 객체든 그 객체와 상호작용을 하는 클래스의 개수와 상호작용 방식에 주의를 기울여야 하는데, 그것 최대한 줄여서 시스템의 한 부분을 고쳤을 때, 줄줄이 얽혀 있는 코드들을 다 고치지 않도록 느슨하게 결합을 해야한다는 원칙이다.

예를 들면 다음과 같은 코드를,

public float getTemp() {
    Thermometer thermometer = station.getThermometer();
    return thermometer.getTemperature();

이런 식으로 최소 지식 원칙을 지켜서 수정할 수 있다.

public float getTemp() {
    return station.getTemperature();

자세한 내용과 예시는 깃허브, 노션 정리 링크에 첨부되어있다.

개선 및 목표

  • 이번주 공부할 시간이 많이 없으니 미리 하자.

  • 복습을 철저히 하자. 빠르게 나간다고 해도 지나면 기억이 안나기 마련이다.

Last updated