자바스크립트의 디자인 패턴

Doyoon Lee·2020년 12월 7일
0
post-thumbnail

자바스크립트의 디자인 패턴

모듈 패턴 Module Pattern

  • 하나의 대표 글로벌 변수 안에 여러 함수를 두는 것이 기본적인 모듈 패턴 방식이다.

사용 예

서버 개발, 라이브러리, API 개발

장점

  • 모듈 간의 의존성을 최소화하거나 의존성을 파악하기 쉽다.
  • 장기적이고 규모가 큰 프로젝트 관리에 유용하다.
  • 복잡한 라이브러리에서 용도를 명확하게 구분하고자 모듈 패턴을 확장하여 네임스페이스로 활용한다.
    • e.g. 구글의 API 를 사용하기 위해 다음과 같이 쓴다.
    • let latlng = new google.maps.LatLng(-34, 150);

이벤트 델리게이션 패턴 Event Delegation Pattern

방법 2가지

  • 하나의 DOM으로 전체를 둘러싸서 처리하는 방법
  • 주요 이벤트가 발생하는 부분 별로 나누어서 처리하는 방법

언제 사용하면 좋을까?

  • 다수의 DOM에 한꺼번에 이벤트 리스너를 할당해야할 때 (예: 구글 스프레드시트)
  • 동적인 DOM에 이벤트 리스너를 그 때 그때 할당해야할 때

유의할 점

  • 바디 태그처럼 너무 상위의 DOM에 하나의 이벤트 리스너를 걸 경우 전파 단계에서 모든 이벤트를 처리하는 자원이 오히려 셀 하나하나 루프를 돌며 리스너를 부착하는 것보다 많이 들 수 있다. 그러니 DOM 트리의 적당한 단계에서 wrapper를 정의해야한다.

프락시 패턴 Proxy Pattern

  • 프락시는 클라이언트와 서버 사이에서 중간자 역할을 한다.
  • 클라이언트와 서버 양쪽 상황에 따라 (조건에 따라 통신하게 함으로써) 중간에서 흐름을 제어하는 기능으로 활용된다.
    • 클릭 이벤트 발생 대상의 id를 기준으로 프락시의 속성에 접근해 함수를 호출한다.

장점

  • 클라이언트가 서버에 직접 접근하지 못하도록 한 단 계 가상화 또는 캡슐화를 한다.
  • 여러 요청을 묶어 한 번에 통신하여 순서를 보장하는 로직이 추가 되고, 서버 과부하도 방지할 수 있다.

프락시를 이용해 구현 가능한 기능

  • 프락시를 활용해 wrapper 기능을 구현할 수 있다. wrapper 함수 안에서 현재 입력으로 들어오는 인자들의 조건에 따라 기존 함수 호출 여부를 결정하는 식으로 활용할 수 있다.
  • 프락시를 활용해 캐시 기능을 구현할 수 있다. 클릭 이벤트가 발생해 해당하는 id의 태그를 찾아야할 때, 미리 cache 변수의 속성으로 저장해두고 있다가 사용하는 것이다.
  • wrapper 함수를 활용해서 로그 기록을 구현할 수도 있다. 추가적인 전처리 로직을 삽입해서 디버깅, 사용자의 행동 패턴 분석, 라이브러리의 활용도를 통계적으로 분석하고자 할 때 활용한다.

0개의 댓글