JavaScript μ λλ μ΄ν° ν¨μ λ° λ°λ³΅κΈ° νλ‘ν μ½μ λν μ’ ν© κ°μ΄λμ λλ€. μ¬μ©μ μ μ λ°λ³΅κΈ°λ₯Ό μμ±νκ³ JavaScript μ ν리μΌμ΄μ μ ν₯μμν€λ λ°©λ²μ λ°°μ°μΈμ.
JavaScript μ λλ μ΄ν° ν¨μ: λ°λ³΅κΈ° νλ‘ν μ½ λ§μ€ν°νκΈ°
ECMAScript 6 (ES6)μμ λμ λ JavaScript μ λλ μ΄ν° ν¨μλ λ κ°κ²°νκ³ μ½κΈ° μ¬μ΄ λ°©μμΌλ‘ λ°λ³΅κΈ°λ₯Ό μμ±νλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄ ν¨μλ λ°λ³΅κΈ° νλ‘ν μ½κ³Ό μλ²½νκ² ν΅ν©λμ΄ λ³΅μ‘ν λ°μ΄ν° ꡬ쑰μ λΉλκΈ° μμ μ μ½κ² μ²λ¦¬ν μ μλ μ¬μ©μ μ μ λ°λ³΅κΈ°λ₯Ό ꡬμΆν μ μλλ‘ μ§μν©λλ€. μ΄ λ¬Έμμμλ μ λλ μ΄ν° ν¨μ, λ°λ³΅κΈ° νλ‘ν μ½ λ° ν΄λΉ μ ν리μΌμ΄μ μ μ€λͺ νλ μ€μ μμ μ 볡μ‘μ±μ μμΈν μ΄ν΄λ΄ λλ€.
λ°λ³΅κΈ° νλ‘ν μ½ μ΄ν΄
μ λλ μ΄ν° ν¨μλ₯Ό μ΄ν΄λ³΄κΈ° μ μ JavaScriptμμ λ°λ³΅ κ°λ₯ν λ°μ΄ν° ꡬ쑰μ κΈ°μ΄λ₯Ό νμ±νλ λ°λ³΅κΈ° νλ‘ν μ½μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λ°λ³΅κΈ° νλ‘ν μ½μ κ°μ²΄λ₯Ό λ°λ³΅ν μ μλ λ°©λ², μ¦ ν΄λΉ μμμ μμ°¨μ μΌλ‘ μ‘μΈμ€ν μ μλ λ°©λ²μ μ μν©λλ€.
λ°λ³΅ κ°λ₯ νλ‘ν μ½
κ°μ²΄λ @@iterator λ©μλ(Symbol.iterator)λ₯Ό ꡬννλ κ²½μ° λ°λ³΅ κ°λ₯μΌλ‘ κ°μ£Όλ©λλ€. μ΄ λ©μλλ λ°λ³΅κΈ° κ°μ²΄λ₯Ό λ°νν΄μΌ ν©λλ€.
κ°λ¨ν λ°λ³΅ κ°λ₯ κ°μ²΄μ μ:
const myIterable = {
data: [1, 2, 3],
[Symbol.iterator]() {
let index = 0;
return {
next() {
if (index < myIterable.data.length) {
return { value: myIterable.data[index++], done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (const item of myIterable) {
console.log(item); // Output: 1, 2, 3
}
λ°λ³΅κΈ° νλ‘ν μ½
λ°λ³΅κΈ° κ°μ²΄μλ next() λ©μλκ° μμ΄μΌ ν©λλ€. next() λ©μλλ λ κ°μ§ μμ±μ΄ μλ κ°μ²΄λ₯Ό λ°νν©λλ€.
value: μνμ€μ λ€μ κ°μ λλ€.done: λ°λ³΅κΈ°κ° μνμ€μ λμ λλ¬νλμ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈμ λλ€.trueλ λμ μλ―Ένκ³ ,falseλ κ²μν κ°μ΄ λ μμμ μλ―Έν©λλ€.
λ°λ³΅κΈ° νλ‘ν μ½μ μ¬μ©νλ©΄ for...of 루ν λ° μ€νλ λ μ°μ°μ(...)μ κ°μ κΈ°λ³Έ μ 곡 JavaScript κΈ°λ₯μ μ¬μ©μ μ μ λ°μ΄ν° ꡬ쑰μ μλ²½νκ² μ¬μ©ν μ μμ΅λλ€.
μ λλ μ΄ν° ν¨μ μκ°
μ λλ μ΄ν° ν¨μλ λ°λ³΅κΈ°λ₯Ό μμ±νλ λ μ°μνκ³ κ°κ²°ν λ°©λ²μ μ 곡ν©λλ€. μ΄ ν¨μλ function* ꡬ문μ μ¬μ©νμ¬ μ μΈλ©λλ€.
μ λλ μ΄ν° ν¨μ ꡬ문
μ λλ μ΄ν° ν¨μμ κΈ°λ³Έ ꡬ문μ λ€μκ³Ό κ°μ΅λλ€.
function* myGenerator() {
yield 1;
yield 2;
yield 3;
}
const iterator = myGenerator();
console.log(iterator.next()); // Output: { value: 1, done: false }
console.log(iterator.next()); // Output: { value: 2, done: false }
console.log(iterator.next()); // Output: { value: 3, done: false }
console.log(iterator.next()); // Output: { value: undefined, done: true }
μ λλ μ΄ν° ν¨μμ μ£Όμ νΉμ§:
functionλμfunction*λ‘ μ μΈλ©λλ€.yieldν€μλλ₯Ό μ¬μ©νμ¬ μ€νμ μΌμ μ€μ§νκ³ κ°μ λ°νν©λλ€.- λ°λ³΅κΈ°μμ
next()κ° νΈμΆλ λλ§λ€ μ λλ μ΄ν° ν¨μλ λ€μyieldλ¬Έμ΄ λ°μνκ±°λ ν¨μκ° λ°νλ λκΉμ§ μ€λ¨λ μμΉμμ μ€νμ λ€μ μμν©λλ€. - μ λλ μ΄ν° ν¨μκ° μ€νμ μλ£νλ©΄(λμ λλ¬νκ±°λ
returnλ¬Έμ΄ λ°μνμ¬) λ°νλ κ°μ²΄μdoneμμ±μ΄trueκ° λ©λλ€.
μ λλ μ΄ν° ν¨μκ° λ°λ³΅κΈ° νλ‘ν μ½μ ꡬννλ λ°©λ²
μ λλ μ΄ν° ν¨μλ₯Ό νΈμΆνλ©΄ μ¦μ μ€νλμ§ μμ΅λλ€. λμ λ°λ³΅κΈ° κ°μ²΄λ₯Ό λ°νν©λλ€. μ΄ λ°λ³΅κΈ° κ°μ²΄λ λ°λ³΅κΈ° νλ‘ν μ½μ μλμΌλ‘ ꡬνν©λλ€. κ° yield λ¬Έμ λ°λ³΅κΈ°μ next() λ©μλμ λν κ°μ μμ±ν©λλ€. μ λλ μ΄ν° ν¨μλ λ΄λΆ μνλ₯Ό κ΄λ¦¬νκ³ μ§ν μν©μ μΆμ νμ¬ μ¬μ©μ μ μ λ°λ³΅κΈ° μμ±μ κ°μνν©λλ€.
μ λλ μ΄ν° ν¨μμ μ€μ μμ
μ λλ μ΄ν° ν¨μμ νκ³Ό λ€μ¬λ€λ₯ν¨μ 보μ¬μ£Όλ λͺ κ°μ§ μ€μ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. μ«μ μνμ€ μμ±
μ΄ μμ μμλ μ§μ λ λ²μ λ΄μμ μ«μ μνμ€λ₯Ό μμ±νλ μ λλ μ΄ν° ν¨μλ₯Ό λ§λλ λ°©λ²μ 보μ¬μ€λλ€.
function* numberSequence(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
const sequence = numberSequence(10, 15);
for (const num of sequence) {
console.log(num); // Output: 10, 11, 12, 13, 14, 15
}
2. νΈλ¦¬ ꡬ쑰 λ°λ³΅
μ λλ μ΄ν° ν¨μλ νΈλ¦¬μ κ°μ 볡μ‘ν λ°μ΄ν° ꡬ쑰λ₯Ό νμνλ λ° νΉν μ μ©ν©λλ€. μ΄ μμ μμλ μ΄μ§ νΈλ¦¬μ λ Έλλ₯Ό λ°λ³΅νλ λ°©λ²μ 보μ¬μ€λλ€.
class TreeNode {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
function* treeTraversal(node) {
if (node) {
yield* treeTraversal(node.left); // μΌμͺ½ νμ νΈλ¦¬μ λν μ¬κ· νΈμΆ
yield node.value; // νμ¬ λ
Έλμ κ°μ yield
yield* treeTraversal(node.right); // μ€λ₯Έμͺ½ νμ νΈλ¦¬μ λν μ¬κ· νΈμΆ
}
}
// μν μ΄μ§ νΈλ¦¬ λ§λ€κΈ°
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
// μ λλ μ΄ν° ν¨μλ₯Ό μ¬μ©νμ¬ νΈλ¦¬ λ°λ³΅
const treeIterator = treeTraversal(root);
for (const value of treeIterator) {
console.log(value); // Output: 4, 2, 5, 1, 3 (μ€μ μν)
}
μ΄ μμ μμ yield*λ λ€λ₯Έ λ°λ³΅κΈ°μ μμνλ λ° μ¬μ©λ©λλ€. μ΄λ μ¬κ·μ λ°λ³΅μ λ§€μ° μ€μνλ©°, μ λλ μ΄ν°κ° μ 체 νΈλ¦¬ ꡬ쑰λ₯Ό νμν μ μλλ‘ ν©λλ€.
3. λΉλκΈ° μμ μ²λ¦¬
μ λλ μ΄ν° ν¨μλ₯Ό Promiseμ κ²°ν©νμ¬ λΉλκΈ° μμ μ λ³΄λ€ μμ°¨μ μ΄κ³ μ½κΈ° μ¬μ΄ λ°©μμΌλ‘ μ²λ¦¬ν μ μμ΅λλ€. μ΄λ APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²κ³Ό κ°μ μμ μ νΉν μ μ©ν©λλ€.
async function fetchData(url) {
const response = await fetch(url);
const data = await response.json();
return data;
}
function* dataFetcher(urls) {
for (const url of urls) {
try {
const data = yield fetchData(url);
yield data;
} catch (error) {
console.error("Error fetching data from", url, error);
yield null; // λλ νμμ λ°λΌ μ€λ₯ μ²λ¦¬
}
}
}
async function runDataFetcher() {
const urls = [
"https://jsonplaceholder.typicode.com/todos/1",
"https://jsonplaceholder.typicode.com/posts/1",
"https://jsonplaceholder.typicode.com/users/1"
];
const dataIterator = dataFetcher(urls);
for (const promise of dataIterator) {
const data = await promise; // yieldμμ λ°νλ promiseλ₯Ό λκΈ°
if (data) {
console.log("Fetched data:", data);
} else {
console.log("Failed to fetch data.");
}
}
}
runDataFetcher();
μ΄ μμ μμλ λΉλκΈ° λ°λ³΅μ 보μ¬μ€λλ€. dataFetcher μ λλ μ΄ν° ν¨μλ κ°μ Έμ¨ λ°μ΄ν°λ‘ νμΈλλ Promiseλ₯Ό yieldν©λλ€. κ·Έλ° λ€μ runDataFetcher ν¨μλ μ΄λ¬ν promiseλ₯Ό λ°λ³΅νμ¬ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μ μ κ° promiseλ₯Ό λκΈ°ν©λλ€. μ΄ μ κ·Ό λ°©μμ λΉλκΈ° μ½λλ₯Ό λ³΄λ€ λκΈ°μ μΌλ‘ 보μ΄κ² νμ¬ λ¨μνν©λλ€.
4. 무ν μνμ€
μ λλ μ΄ν°λ 무ν μνμ€λ₯Ό λνλ΄λ λ° μ ν©ν©λλ€. 무ν μνμ€λ λμ΄ μλ μνμ€μ λλ€. μμ² μμλ§ κ°μ μμ±νλ―λ‘ κ³Όλν λ©λͺ¨λ¦¬λ₯Ό μλΉνμ§ μκ³ λ 무νν κΈ΄ μνμ€λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
function* fibonacciSequence() {
let a = 0, b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
const fibonacci = fibonacciSequence();
// μ²μ 10κ°μ νΌλ³΄λμΉ μ κ°μ Έμ€κΈ°
for (let i = 0; i < 10; i++) {
console.log(fibonacci.next().value); // Output: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
}
μ΄ μμ μμλ 무ν νΌλ³΄λμΉ μμ΄μ λ§λλ λ°©λ²μ 보μ¬μ€λλ€. μ λλ μ΄ν° ν¨μλ 무기νμΌλ‘ νΌλ³΄λμΉ μλ₯Ό yieldν©λλ€. μ€μ λ‘ λ¬΄ν 루ν λλ λ©λͺ¨λ¦¬ μλͺ¨λ₯Ό λ°©μ§νκΈ° μν΄ κ²μλλ κ°μ μλ₯Ό μΌλ°μ μΌλ‘ μ νν©λλ€.
5. μ¬μ©μ μ μ λ²μ ν¨μ ꡬν
μ λλ μ΄ν°λ₯Ό μ¬μ©νμ¬ Pythonμ κΈ°λ³Έ μ 곡 λ²μ ν¨μμ μ μ¬ν μ¬μ©μ μ μ λ²μ ν¨μλ₯Ό λ§λλλ€.
function* range(start, end, step = 1) {
if (step > 0) {
for (let i = start; i < end; i += step) {
yield i;
}
} else if (step < 0) {
for (let i = start; i > end; i += step) {
yield i;
}
}
}
// 0μμ 5κΉμ§μ μ«μ μμ±(5λ μ μΈ)
for (const num of range(0, 5)) {
console.log(num); // Output: 0, 1, 2, 3, 4
}
// 10μμ 0κΉμ§μ μ«μ μμμΌλ‘ μμ±(0μ μ μΈ)
for (const num of range(10, 0, -2)) {
console.log(num); // Output: 10, 8, 6, 4, 2
}
κ³ κΈ μ λλ μ΄ν° ν¨μ κΈ°μ
1. μ λλ μ΄ν° ν¨μμμ `return` μ¬μ©
μ λλ μ΄ν° ν¨μμ return λ¬Έμ λ°λ³΅μ λμ μλ―Έν©λλ€. return λ¬Έμ΄ λ°μνλ©΄ λ°λ³΅κΈ°μ next() λ©μλμ done μμ±μ΄ trueλ‘ μ€μ λκ³ value μμ±μ΄ return λ¬Έμμ λ°νλ κ°μΌλ‘ μ€μ λ©λλ€(μλ κ²½μ°).
function* myGenerator() {
yield 1;
yield 2;
return 3; // λ°λ³΅ μ’
λ£
yield 4; // μ€νλμ§ μμ
}
const iterator = myGenerator();
console.log(iterator.next()); // Output: { value: 1, done: false }
console.log(iterator.next()); // Output: { value: 2, done: false }
console.log(iterator.next()); // Output: { value: 3, done: true }
console.log(iterator.next()); // Output: { value: undefined, done: true }
2. μ λλ μ΄ν° ν¨μμμ `throw` μ¬μ©
λ°λ³΅κΈ° κ°μ²΄μ throw λ©μλλ₯Ό μ¬μ©νλ©΄ μμΈλ₯Ό μ λλ μ΄ν° ν¨μμ μ½μ
ν μ μμ΅λλ€. μ΄λ μ λλ μ΄ν° λ΄μμ μ€λ₯λ₯Ό μ²λ¦¬νκ±°λ νΉμ 쑰건μ μ리λ λ° μ μ©ν μ μμ΅λλ€.
function* myGenerator() {
try {
yield 1;
yield 2;
} catch (error) {
console.error("Caught an error:", error);
}
yield 3;
}
const iterator = myGenerator();
console.log(iterator.next()); // Output: { value: 1, done: false }
iterator.throw(new Error("Something went wrong!")); // μ€λ₯ μ½μ
console.log(iterator.next()); // Output: { value: 3, done: false }
console.log(iterator.next()); // Output: { value: undefined, done: true }
3. `yield*`λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ λ°λ³΅ κ°λ₯ κ°μ²΄μ μμ
νΈλ¦¬ νμ μμ μμ λ³Ό μ μλ―μ΄ yield* ꡬ문μ μ¬μ©νλ©΄ λ€λ₯Έ λ°λ³΅ κ°λ₯ κ°μ²΄(λλ λ€λ₯Έ μ λλ μ΄ν° ν¨μ)μ μμν μ μμ΅λλ€. μ΄λ λ°λ³΅κΈ°λ₯Ό ꡬμ±νκ³ λ³΅μ‘ν λ°λ³΅ λ
Όλ¦¬λ₯Ό λ¨μννλ κ°λ ₯ν κΈ°λ₯μ
λλ€.
function* generator1() {
yield 1;
yield 2;
}
function* generator2() {
yield* generator1(); // generator1μ μμ
yield 3;
yield 4;
}
const iterator = generator2();
for (const value of iterator) {
console.log(value); // Output: 1, 2, 3, 4
}
μ λλ μ΄ν° ν¨μ μ¬μ©μ μ΄μ
- ν₯μλ κ°λ μ±: μ λλ μ΄ν° ν¨μλ μλ λ°λ³΅κΈ° ꡬνμ λΉν΄ λ°λ³΅κΈ° μ½λλ₯Ό λ κ°κ²°νκ³ μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- λ¨μνλ λΉλκΈ° νλ‘κ·Έλλ°: λΉλκΈ° μμ μ λ³΄λ€ λκΈ°μ μΈ μ€νμΌλ‘ μμ±ν μ μλλ‘ νμ¬ λΉλκΈ° μ½λλ₯Ό κ°μνν©λλ€.
- λ©λͺ¨λ¦¬ ν¨μ¨μ±: μ λλ μ΄ν° ν¨μλ μμ² μμ κ°μ μμ±νλ©°, μ΄λ λμ©λ λ°μ΄ν° μΈνΈ λλ 무ν μνμ€μ νΉν μ μ©ν©λλ€. μ 체 λ°μ΄ν° μΈνΈλ₯Ό ν λ²μ λ©λͺ¨λ¦¬μ λ‘λνμ§ μμ΅λλ€.
- μ½λ μ¬μ¬μ©μ±: μ ν리μΌμ΄μ μ λ€μν λΆλΆμμ μ¬μ©ν μ μλ μ¬μ¬μ© κ°λ₯ν μ λλ μ΄ν° ν¨μλ₯Ό λ§λ€ μ μμ΅λλ€.
- μ μ°μ±: μ λλ μ΄ν° ν¨μλ λ€μν λ°μ΄ν° ꡬ쑰μ λ°λ³΅ ν¨ν΄μ μ²λ¦¬ν μ μλ μ¬μ©μ μ μ λ°λ³΅κΈ°λ₯Ό λ§λλ μ μ°ν λ°©λ²μ μ 곡ν©λλ€.
μ λλ μ΄ν° ν¨μ μ¬μ©μ μν λͺ¨λ² μ¬λ‘
- μ€λͺ μ μΈ μ΄λ¦ μ¬μ©: μ½λ κ°λ μ±μ λμ΄κΈ° μν΄ μ λλ μ΄ν° ν¨μ λ° λ³μμ μλ―Έ μλ μ΄λ¦μ μ νν©λλ€.
- μ μμ μΌλ‘ μ€λ₯ μ²λ¦¬: μκΈ°μΉ μμ λμμ λ°©μ§νκΈ° μν΄ μ λλ μ΄ν° ν¨μ λ΄μμ μ€λ₯ μ²λ¦¬λ₯Ό ꡬνν©λλ€.
- 무ν μνμ€ μ ν: 무ν μνμ€λ‘ μμ ν λλ 무ν 루ν λλ λ©λͺ¨λ¦¬ μλͺ¨λ₯Ό λ°©μ§νκΈ° μν΄ κ²μλλ κ°μ μλ₯Ό μ ννλ λ©μ»€λμ¦μ΄ μλμ§ νμΈν©λλ€.
- μ±λ₯ κ³ λ €: μ λλ μ΄ν° ν¨μλ μΌλ°μ μΌλ‘ ν¨μ¨μ μ΄μ§λ§, νΉν κ³μ° μ§μ½μ μΈ μμ μ μ²λ¦¬ν λλ μ±λ₯μ λ―ΈμΉλ μν₯μ μ μν΄μΌ ν©λλ€.
- μ½λ λ¬Έμν: λ€λ₯Έ κ°λ°μκ° μ¬μ©νλ λ°©λ²μ μ΄ν΄νλ λ° λμμ΄ λλλ‘ μ λλ μ΄ν° ν¨μμ λν λͺ ννκ³ κ°κ²°ν λ¬Έμλ₯Ό μ 곡ν©λλ€.
JavaScriptλ₯Ό λμ΄μ μ¬μ© μ¬λ‘
μ λλ μ΄ν° λ° λ°λ³΅κΈ°μ κ°λ μ JavaScriptλ₯Ό λμ΄ λ€μν νλ‘κ·Έλλ° μΈμ΄ λ° μλ리μ€μμ μμ© νλ‘κ·Έλ¨μ μ°Ύμ΅λλ€. μ:
- Python: Pythonμλ JavaScriptμ λ§€μ° μ μ¬νκ²
yieldν€μλλ₯Ό μ¬μ©νλ μ λλ μ΄ν°μ λν κΈ°λ³Έ μ 곡 μ§μμ΄ μμ΅λλ€. ν¨μ¨μ μΈ λ°μ΄ν° μ²λ¦¬ λ° λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ리 μ¬μ©λ©λλ€. - C#: C#μ λ°λ³΅κΈ° λ°
yield returnλ¬Έμ νμ©νμ¬ μ¬μ©μ μ μ 컬λ μ λ°λ³΅μ ꡬνν©λλ€. - λ°μ΄ν° μ€νΈλ¦¬λ°: λ°μ΄ν° μ²λ¦¬ νμ΄νλΌμΈμμ μ λλ μ΄ν°λ₯Ό μ¬μ©νμ¬ λμ©λ λ°μ΄ν° μ€νΈλ¦Όμ μ²ν¬ λ¨μλ‘ μ²λ¦¬νμ¬ ν¨μ¨μ±μ λμ΄κ³ λ©λͺ¨λ¦¬ μλΉλ₯Ό μ€μΌ μ μμ΅λλ€. μ΄λ μΌμ, κΈμ΅ μμ₯ λλ μμ λ―Έλμ΄μ μ€μκ° λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ νΉν μ€μν©λλ€.
- κ²μ κ°λ°: μ λλ μ΄ν°λ₯Ό μ¬μ©νμ¬ μ 체 μ½ν μΈ λ₯Ό 미리 κ³μ°νκ³ λ©λͺ¨λ¦¬μ μ μ₯νμ§ μκ³ λ μ§ν μμ± λλ μ λλ©μ΄μ μνμ€μ κ°μ μ μ°¨μ μ½ν μΈ λ₯Ό λ§λ€ μ μμ΅λλ€.
κ²°λ‘
JavaScript μ λλ μ΄ν° ν¨μλ λ°λ³΅κΈ°λ₯Ό λ§λ€κ³ λΉλκΈ° μμ
μ λ³΄λ€ μ°μνκ³ ν¨μ¨μ μΈ λ°©μμΌλ‘ μ²λ¦¬νλ κ°λ ₯ν λꡬμ
λλ€. λ°λ³΅κΈ° νλ‘ν μ½μ μ΄ν΄νκ³ yield ν€μλλ₯Ό λ§μ€ν°νλ©΄ μ λλ μ΄ν° ν¨μλ₯Ό νμ©νμ¬ λ³΄λ€ μ½κΈ° μ½κ³ μ μ§ κ΄λ¦¬ κ°λ₯νλ©° μ±λ₯μ΄ λ°μ΄λ JavaScript μ ν리μΌμ΄μ
μ ꡬμΆν μ μμ΅λλ€. μ«μ μνμ€ μμ±λΆν° 볡μ‘ν λ°μ΄ν° ꡬ쑰 νμ λ° λΉλκΈ° μμ
μ²λ¦¬μ μ΄λ₯΄κΈ°κΉμ§ μ λλ μ΄ν° ν¨μλ κ΄λ²μν νλ‘κ·Έλλ° κ³Όμ λ₯Ό μν λ€μ©λ μ루μ
μ μ 곡ν©λλ€. μ λλ μ΄ν° ν¨μλ₯Ό μμ©νμ¬ JavaScript κ°λ° μν¬νλ‘μμ μλ‘μ΄ κ°λ₯μ±μ μ΄μ΄λ³΄μΈμ.