ES6 제너레이터
자바스크립트의 비동기 프로그래밍은 콜백, Promise, async/await 등 다양한 방법으로 구현될 수 있습니다. 이 중 제너레이터는 비교적 오래된 개념이지만, 여전히 비동기 처리에 있어 독특하고 강력한 도구입니다. 특히, 복잡한 비동기 흐름을 관리하고 동기적인 코드처럼 작성하고 싶을 때 유용하게 활용될 수 있습니다.
제너레이터란 무엇인가?
제너레이터는 함수를 실행하다가 중간에 멈췄다가 다시 시작할 수 있는 특별한 함수입니다. function* 키워드를 사용하여 선언하며, yield 키워드를 통해 값을 반환하고 실행을 일시 중단합니다. 제너레이터는 이터레이터를 생성하며, next() 메서드를 호출할 때마다 다음 yield 문까지 실행됩니다.
제너레이터를 이용한 비동기 처리
제너레이터는 비동기 작업을 동기적인 코드처럼 작성할 수 있도록 도와줍니다. 다음은 간단한 예시입니다.
function\* fetchData() {
const data = yield fetch('https://api.example.com/data');
const json = yield data.json();
return json;
}
const generator = fetchData();
generator.next()
.then(response => generator.next(response))
.then(json => console.log(json));
위 코드에서 fetchData 제너레이터는 fetch API를 이용하여 데이터를 가져오고, json() 메서드로 JSON 데이터를 파싱합니다. 각 yield 문에서 next() 메서드를 호출하여 비동기 작업이 완료될 때까지 기다리고, 결과를 다음 yield 문으로 전달합니다.
제너레이터의 장단점
장점:
- 복잡한 비동기 흐름을 간결하게 표현할 수 있습니다.
- 동기적인 코드처럼 작성하여 가독성을 높일 수 있습니다.
- async/await보다 더 유연하게 비동기 처리를 제어할 수 있습니다.
단점:
- 굳이 사용할 필요가 없을 수 있습니다.
- async/await에 비해 문법이 복잡할 수 있습니다.