• 모닥위키모닥위키
  • 모닥위키
위키
  • 임의문서
  • 주간인기
  • 문서
  • 시리즈
    AAAdddvvveeerrrtttiiissseeemmmeeennntttAdvertisement

    © 2025 modak.wiki All rights reserved.

      컬렉션과 제너레이터

      Chapter 24 - Collections and Generators

      컴퓨터/IT학습
      lu

      luasenvy (luasenvy)

      CC BY 4.0 국제규약

      컬렉션

      자료를 표현할 수 있는 객체 자료형의 하나로 Set, Map, WeakSet, WeakMap 등이 있다. Weak로 시작하는 자료형은 약한 참조를 사용하여 가비지 컬렉션을 통한 메모리 관리를 할 수 있다.

      Set

      const myset = new Set();
      
      myset.add(1);
      myset.add(1);
      myset.add(2);
      myset.add(3);
      myset.add(4);
      
      console.info(myset); // 1,2,3,4
      

      Set은 배열과 비슷하지만 순서를 보장하진 않고 중복없이 데이터를 나열할 수 있다.

      Map

      const mymap = new Map();
      
      mymap.set("1", 1);
      mymap.set(1, 2);
      mymap.set(() => {}, 3);
      mymap.set({}, 4);
      
      console.info(mymap);
      // 0 : {"1" => 1}
      // 1 : {1 => 2}
      // 2 : {() => {} => 3}
      // 3 : {Object => 4}
      // size : 4
      

      Map은 키-값 쌍으로 데이터를 저장할 수 있다. 언뜻보면 일반 객체({})와 차이가 없어 보이지만 크기를 확인할 수 있는 size 멤버를 제공한다. 기본적으로 반복 가능한 객체로 반복과 삽입 성능이 더 최적화 되어 있으며 순서를 보장한다. 또한 키를 객체, 함수, 숫자 등 다양한 자료형으로 설정할 수 있다.

      제너레이터

      자바스크립트의 제너레이터는 함수 실행을 중단하고 다시 재개할 수 있는 특별한 함수다. function* 키워드를 사용해 정의하며 yield 문을 통해 중간 값을 반환한다. 제너레이터는 Iterable 객체를 반환하며 next() 메서드를 통해 실행을 제어할 수 있다. 일반 함수와는 다르게 한 번에 전체를 실행하지 않고 중단된 상태에서 필요한 부분만 실행할 수 있어 비동기 처리에 유용하다.

      function* myGenerator() {
        yield 1;
        yield 2;
        yield 3;
      }
      
      const gen = myGenerator();
      console.log(gen.next().value); // 1
      console.log(gen.next().value); // 2
      console.log(gen.next().value); // 3
      

      위 예시를 보면 next()를 호출 하기 전까지는 제너레이터가 실행을 멈추고 대기한다. next()를 호출하면 다시 실행되어 다음 yield를 만날때까지 실행하고 반환하고 다시 대기한다.

      function* infinite() {
        let index = 0;
      
        while (true) {
          yield index++;
        }
      }
      

      이 특성을 응용하면 무한 루프처럼 정지할 걱정 없이 무한한 데이터 구조를 정의할 수도 있다.

      초판: 2024. 08. 20. 11:40:49

      © 2024 이 문서는 "CC BY 4.0 국제규약" 라이선스로 배포 되었습니다. 모든 권리는 저자에게 있습니다.

      컬렉션과 제너레이터

      컬렉션
      Set
      Map
      제너레이터