2020-09-22 TIL

less than 1 minute read

데코레이터 패턴

  • 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 객체에 추가적인 요건을 동적으로 첨가하며, 기능 확장이 필요할 때 서브 클래스를 만드는 대신 쓸 수 있는 대안

구조

  • https://gmlwjd9405.github.io/images/design-pattern-decorator/decorator-pattern.png

  • Component
    • 기본 기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Decorator의 공통 기능을 정의
    • 즉, 클라이언트는 Component를 통해 실제 객체를 사용함
  • ConcreteComponent -기본 기능을 구현하는 클래스
  • Decorator -많은 수가 존재하는 구체적인 Decorator의 공통 기능을 제공
  • ConcreteDecoratorA, ConcreteDecoratorB -Decorator의 하위 클래스로 기본 기능에 추가되는 개별적인 기능을 뜻함
    • ConcreteDecorator 클래스는 ConcreteComponent 객체에 대한 참조가 필요한데, 이는 Decorator 클래스에서 Component 클래스로의 ‘합성(composition) 관계’를 통해 표현됨 https://gmlwjd9405.github.io/2018/07/09/decorator-pattern.html

Serialize

  • 인스턴스를 바이트 배열로 바꾸는 것
    • 바이트 배열에는 인스턴스 필드 값 + 클래스 정보
  • 직렬화
  • 고유의 값(시리얼 버젼 UID)을 부여해서 데이터를 아웃, 인 할 때 동일한 데이터인지 비교한다.
  • 시리얼 버젼 UID는 개발자가 지정하지 않으면 자동으로 생성된다.
  • 필드를 추가하지 않고 메서드를 바꾸는 것은 시리얼 버젼 UID가 변경되지 않는다.
    • 하지만 필드를 추가하는 경우 시리얼 버젼 UID가 변경된다.
  • 시리얼 버젼 UID를 지정해놨을 경우 필드를 변경해도 실행 오류가 생기지 않는다.
  • deserialize를 통해 인스턴스가 생성될 때는 생성자가 호출되지 않는다.
  • 데이터 왜곡을 막기 위해서 transient 명령어를 사용한다.

Categories:

Updated: