0618 -[js] Iterator와 Generator

정연진·2021년 6월 18일
0

/1.iterator무엇이냐? 또 그걸 왜 사용하냐?
//순차적으로 데이터를 서비스해주는 객체
//모든 컬렉션을 단일한 방법으로 순회하기 위해

//2. iterator를 개별 객체로 사용하는 이유는 뭐냐?
//스레드에 안전하도록 하기 위해

Iterator란

Iterator가 무엇이냐

순차적으로 데이터를 서비스해주는 객체

Iterator를 왜 사용하는가?

모든 컬렉션을 단일한 방법으로 순회하기 위해

Iterator를 개별 객체로 사용하는 이유는?

스레드로부터 안전하기 위해

Iterator를 분리시키지 않으면 멀티스레드가 병행될 때
각각의 스레드가 Iterator의 구분자(current변수)를 공유하게 된다.
그러면 current값이 올바르게 유지 될 수 없다.(빵꾸남..)

Symbol

자바에서는 미리 명명해놓는 도구로 interface가 있었다.
자바스크립트에서는 Symbol이 있다.
나 이거(ex.이터레이터) 필요한데 만들어줘. 근데 우연히 이름이 겹칠 수 도있고 헷갈리니까 symbol로 약속해놓자.
자바스크립트에서는 iterator를 symbol로 약속해놓고 있다.
그래서 iterator를 구현하기 위해서는 symbol을 이용해야 한다.

for-of문을 사용하려면 그 객체 내에 이터레이터가 구현되어있어야 하는데 그 때 이터레이터는 symbol로 명명해야한다.

Generator

generator는 iterator를 구현하기 위한 좋은 도구이다.

generator함수는 function*으로 나타낸다.

function* aa(){
    for(let i=0; i<100; i++){
        yield i
    }
}

aa()라는 generator함수는 iterator를 반환한다.
generator함수에서 yield라는 키워드는 순서를 기다리다가 앞에 애가 나가면 다음에 리턴된당
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/yield


let it = aa(); //이터레이터를 반환함

console.log(it.next().value); //0
console.log(it.next().value); //1
console.log(it.next().value); //2
console.log(it.next().value); //3
console.log(it.next().value); //4
console.log(it.next().value); //5
console.log(it.next().value); //6
console.log(it.next().value); //7
console.log(it.next().value); //8
.
.
.
profile
열공해욧

0개의 댓글