7주차 정리

2025. 4. 29. 23:49·Book/디자인 패턴의 아름다움

퍼사드 패턴

퍼사드 패턴은 그 원리와 구현이 매우 간단할 뿐만 아니라 사용 대상이 비교적 명확하기 때문에 주로 인터페이스 설계에 사용된다.

퍼사드 패턴은 서브 시스템에 대한 통합 인터페이스 세트를 제공하고, 하위 시스템을 더 쉽게 만들기 위한 상위 통합 인터페이스를 제공한다.

생각해보기

어댑터 패턴은 호환되지 않는 인터페이스를 연결하는 설계 이념인 반면, 퍼사드 패턴은 결합도를 낮추기 위해 로직들을 결합해 진입점을 단순하게 하고, 결합한 로직들을 캡슐화를 한다는 설계 이념으로 차이가 있다.

복합체 패턴

복합체패턴은 객체지향 설계의 합성과는 전혀 관계가 없다. 주로 트리 구조의 데이터를 처리하는 데 사용된다.

복합체 패턴은 일종의 부분-전체 계층구조로 인식하는 트리 구조로 구성된 객체 컬렉션이며, 복합체 패턴을 통해 코드 사용자로 대표되는 클라이언트가 개별 객체와 복합 객체의 처리 방식을 하나로 통합할 수 있다고 정의한다.

→ 복합체 패턴은 트리 구조를 관리하는 패턴이다. 추상화된 인터페이스로 트리 구조를 표현해, 부모와 자식간에 동일한 행동을 공통 인터페이스로 관리한다는 이점이 있다. 이 구조는 부모, 자식이라는 개념으로 설계하기 보다는 전체를 부모와 자식으로 표현한다고 보는게 옳을 것 같다.

플라이웨이트 패턴

공유를 위해 사용되는 패턴으로, 그 목적은 객체를 재사용하여 메모리를 절약하는 것이다. 이때 공유되는 객체는 불변 객체여야만 한다.

플라이웨이트 패턴은 JVM의 쓰레기 수집(가비지 컬렉터)기능과는 상성이 좋지 않다. 팩터리 클래스가 항상 플라이웨이트 클래스의 객체애 대한 참조를 유지하기 때문에 플라이웨이트 클래스의 객체는 코드에서 전혀 사용되고 있지 않은 상황에서도 JVM의 가비지 컬렉터 기능에 의해 자동으로 메모리 회수가 일어나지 않는다. 객체의 수명이 짧은데다 사용이 그다지 많지 않다면 메모리를 절약하기 위해 사용한 플라이웨이트 패턴이 오히려 더 많은 메모리를 낭비할 수도 있다. 플라이웨이트 사용한 결과 실제로 메모리를 크게 절약할 수 있다는 결과를 확인하지 못했다면 이 패턴을 남용해서는 안 된다.

플라이웨이트 패턴과 싱글턴 패턴의 차이점

비교 대상 플라이웨이트 싱글턴

객체 생성 여러 객체 생성 단일 객체 생성
설계 의도 관점 객체를 재 사용해 메모리를 절약 객체 수를 제한

플라이웨이트 패턴과 캐싱의 차이점

플라이웨이트 패턴은 팩터리 클래스를 사용하여 생성된 객체를 캐싱함

캐시는 실제 저장소를 의미하며 우리가 일반적으로 언급하는 데이터베이스 캐시, CPU 캐시, MemCache 캐시와는 다르다. 우리가 일반적으로 언급하는 캐시는 재사용이 아니라 액세스 효율성을 개선하기 위한 것

플라이웨이트 패턴과 오브젝트 풀의 차이점

C++같이 언어에서 직접 메모리 관리를 하는 경우, 빈번한 객체 생성과 해제로 인한 메모리의 단편화를 방지하기 위해 연속적인 메모리 공간을 미리 준비할 수 있고, 이러한 객체 풀을 오브젝트 풀이라고 한다.

풀링 기술에서 말하는 재사용은 플라이웨이트 패턴의 재사용과 전혀 다른 개념임

'Book > 디자인 패턴의 아름다움' 카테고리의 다른 글

8주차 정리  (0) 2025.05.03
6주차 정리  (0) 2025.04.29
5주차 정리  (0) 2025.04.29
4주차 정리  (0) 2025.04.29
3주차 정리  (0) 2025.04.29
'Book/디자인 패턴의 아름다움' 카테고리의 다른 글
  • 8주차 정리
  • 6주차 정리
  • 5주차 정리
  • 4주차 정리
jun96
jun96
프로그래밍 공부
  • jun96
    jun의 공부노트
    jun96
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • Spring (6)
        • 개념 (3)
        • 에러 (1)
      • Java (1)
      • Book (20)
        • 모던 자바 인 액션 (12)
        • 디자인 패턴의 아름다움 (7)
      • Algorithm (1)
      • 코딩테스트 (35)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 이력서
  • 공지사항

  • 인기 글

  • 태그

    aws에 배포하기
    스프링
    datetime
    wikidocs
    aws배포
    최프
    아직 미완성
    DeepDive
    Java
    알고리즘
    Algorithm
    자바
    백준
    전자정부프레임워크
    python설치
    프로그래머스
    도커컨테이너빌드업
    디자인패턴의아름다움
    모던자바인액션
    junit5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jun96
7주차 정리
상단으로

티스토리툴바