[CS지식] 1-1. 디자인 패턴 - 이터레이터 패턴(Iterator Pattern) & 노출모듈 패턴(Revealing Module Pattern)

김zunyange·2023년 5월 17일
0

CS Note

목록 보기
3/13
post-thumbnail

1-1-4 옵저버 패턴 Observer Pattern & 1-1-5 프록시 패턴과 프록시 서버에 대해 👈

1-1-6. Iterator Pattern

예를 들어 객체들을 배열, 스택, 해시테이블 등의 컬렉션에 넣어서 보관할 수 있다. 그런데 클라이언트가 해당 객체들에게 일일이 접근하는 작업을 원할 수 있다.
이런 경우, 사용하는 것이 반복자(이터레이터) 패턴이다

반복자(이터레이터) 패턴이란?
*Iterator : 반복하다 , 반복자
객체를 저장하는 방식은 보여주지 않으면서도 클라이언트가 객체들에게 일일이 접근할 수 있게 해주는 방법

  • 이 패턴의 구현 방법은 반복 작업을 Iterator 인터페이스를 이용하여 캡슐화 하는 것이다.
  • 무엇인가 많이 모여있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것이다.
  • 이터레이터 패턴을 사용하면 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 그 안에 들어있는 항목들에 대해서 반복작업을 수행할 수 있다.

반복이라는 특징을 계속 볼 수 있는데, 반복자(Iterator)를 만들어 이터레이터 패턴을 사용해서 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식을 통일할 수 있는 것이다.
접근 방식을 통일하게되면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있다. 또한 모든 항목에 일일이 접근하는 작업을 컬렉션 객체가 아닌 반복자 객체에서 맡게 된다는 점이다. 이를 통해 집합체의 인터페이스 및 구현이 간단해질 뿐만 아니라, 집합체에서는 자신의 객체 컬렉션 관리에만 전념할 수 있게 된다.


1-1-7. Revealing Module Pattern

자바스크립트의 주요 문제점 하나는 네임스페이스가 없다는 것이다.
전역 범위에서 실행되는 프로그램은 내부 어플리케이션과 종속된 라이브러리 코드의 데이터들로 인해 충돌이 발생 할 수 있기 때문에 이 문제를 해결 하기 위한 보편전 방법이 노출식 모듈 패턴이다.

노출 모듈 패턴이란?
즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴

자바스크립트는 접근 제어자가 존재하지 않고 전역 범위에서 스크립트가 실행되기 때문에 노출모듈 패턴을 통해 private와 public 접근 제어자를 구현한다.

(1) 자바스크립트에서의 노출 모듈 패턴

const pukuba = (() => {
    const a = 1
    const b = () => 2
    const public = {
        c: 2,
        d: () => 3
    }
    return public
})()

console.log(pukuba) // { c: 2, d: [Function: d] }
console.log(pukuba.a) // undefined

a와 b는 다른 모듈에서 사용할 수 있는 변수나 함수인 private 범위를 가지고 다른 모듈에서 접근할 수 없고, c와 d는 다른 모듈에서 사용할 수 있는 변수나 함수인 public 범위를 가진다.

(2) 장점

  • 개발자에게 깔끔한 접근 방법을 제공
  • private 데이터 제공
  • 전역 변수를 덜 더럽힘
  • 클로저를 통해 함수와 변수를 지역화
  • 스크립트 문법이 더 일관성 있음
  • 명시적으로 public 메소드와 변수를 제공해 명시성을 높임

(3) 단점

  • private 메소드 접근할 방법이 없음 (이런 메소드에 대한 테스트의 어려움을 이야기하기도 하지만 함수 무결성을 고려할 때 공개된 메소드만 테스트 하는게 맞음. 관련 없지만 기록용으로.)
  • private 메소드에 대해 함수 확장하는데 어려움이 있음
  • private 메소드를 참조하는 public 메소드를 수정하기 어려움

📍 출처
주홍철, [면접을 위한 CS 전공지식 노트]

[Design pattern] 많이 쓰는 14가지 핵심 GoF 디자인 패턴의 종류
https://github.com/haruair/note/issues/12

📍 참고하면 좋을 사이트

profile
배움은 즐거워 ~(*ૂ❛ᴗ❛*ૂ)

0개의 댓글