ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디자인 패턴 3- 옵저버 패턴, 프록시 객체
    Today I Learned/CS공부 2023. 12. 23. 19:43

     

    옵저버 패턴(Observer Pattern)

    옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가, 상태 변화가 있을 때마다 매서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인패턴이다. 여기서 주체란, 객체의 상태변화를 보고 있는 관찰자이며, 옵저버들이란 이 객체의 상태 변화에 따라 전달되는 매서드 등을 기반으로 추가 변화 사항이 생기는 객체들을 의미한다.

     

    옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며, MVC (model-controller-view) 패턴에도 사용된다. 예를들어, 주체라고 볼 수 있는 모델(model)에서 변경 사항이 생겨 update() 매서드로 옵저버인 뷰에 알려주고 이를 기반으로 컨트롤러가 작동하는 것도 옵저버패턴의 한 예라고 할 수 있다.

     

    자바스크립트에서 옵저버 패턴은 프록시 객체를 통해 구현할 수도 있는데, 프록시 객체는 어떠한 대상의 기본적인 속성(접근, 순회, 호출 등)의 작업을 가로챌 수 있는 객체를 뜻하며, 자바스크립트에서 프록시 객체는 두 개의 매개변수를 가진다.

    const handler = {
    	get : function(target, name) {
        	return name === 'name' ? `${target.a} ${target.b}` : target[name]
           }
     }
     
     const p = new Proxy({a: 'KUNDOL', b: 'IS AUMUMU ZANGIN'}, handler)
     console.log(p.name) // KUNDUL IS AUMUMu ZANGIN

     

    new Proxy()로 a와 b 속성을 가지고 있는 객체와 handler 함수를 매개변수로 넣고 p라는 변수로 선언했다. 이후 p의 name속성을 참조하니 a와 b라는 속성밖에 없는 객체가 handler의 'name 이라는 속성에 접근할 때 a와 b를 합쳐서 문자열을 만들라'라는 로직에 따라 문자열을 만든다. 이렇게 name속성 등 특정 속성에 접근할 때 그 부분을 가로채서 어떤 로직을 강제할 수 있는 것이 프록시 객체다.

    댓글

Designed by Tistory.