๐Ÿš€ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ตฌํ˜„: TypeScript์˜ ๋งˆ๋ฒ• ๊ฐ™์€ ์—ฌ์ • ๐Ÿง™โ€โ™‚๏ธ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ตฌํ˜„: TypeScript์˜ ๋งˆ๋ฒ• ๊ฐ™์€ ์—ฌ์ • ๐Ÿง™โ€โ™‚๏ธ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์ฝ”๋”ฉ ๋งˆ๋ฒ•์‚ฌ ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ TypeScript์˜ ์‹ ๋น„๋กœ์šด ์„ธ๊ณ„๋กœ ์—ฌ๋Ÿฌ๋ถ„์„ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์ง€๋Š” ๋ฐ”๋กœ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ผ๋Š” ๋งˆ๋ฒ•์˜ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ด ์—ฌ์ •์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ž์œ ์ž์žฌ๋กœ ๋‹ค๋ฃจ๋Š” ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”! ๐ŸŽฉโœจ

์—ฌ๋Ÿฌ๋ถ„, ํ˜น์‹œ ์žฌ๋Šฅ๋„ท์ด๋ผ๋Š” ์žฌ๋Šฅ ๊ณต์œ  ํ”Œ๋žซํผ์„ ๋“ค์–ด๋ณด์…จ๋‚˜์š”? ์ด๊ณณ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์—ฌ ์ง€์‹์„ ๋‚˜๋ˆ„๊ณ  ์žˆ์ฃ . ์˜ค๋Š˜ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šธ ๋‚ด์šฉ๋„ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ๊ท€์ค‘ํ•œ ์žฌ๋Šฅ์ด ๋  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ์ž, ๊ทธ๋Ÿผ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ์ˆ˜์—…์„ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ๐Ÿง™โ€โ™€๏ธ๐Ÿ”ฎ

๐ŸŒŸ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜: ๋งˆ๋ฒ•์˜ ์‹œ์ž‘ ๐ŸŒŸ

์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋Š” ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ์˜ ์ฃผ๋ฌธ์ฑ…๊ณผ ๊ฐ™์•„์š”. ํ•œ ๋ฒˆ์— ๋ชจ๋“  ์ฃผ๋ฌธ์„ ์™ธ์šฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ•œ ์ค„์”ฉ ์ฝ์–ด๋‚˜๊ฐ€๋Š” ๊ฑฐ์ฃ . ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—„์ฒญ๋‚œ ์–‘์˜ ์ฃผ๋ฌธ๋„ ๋ถ€๋‹ด ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐Ÿง™โ€โ™‚๏ธ๐Ÿ“š

์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์˜ ํŠน์ง•:

  • ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ๋‚˜์ค‘์— ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์–ด์š”. โธ๏ธโ–ถ๏ธ
  • ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๐ŸŽ
  • ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์š”. ๐Ÿง 

์ž, ์ด์ œ TypeScript๋กœ ๊ฐ„๋‹จํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”? ๐Ÿ–‹๏ธ


function* numberGenerator() {
    yield 1;
    yield 2;
    yield 3;
}

const gen = numberGenerator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
  

์œ„์˜ ์ฝ”๋“œ์—์„œ function*๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฌธ๋ฒ•์ด์—์š”. yield ํ‚ค์›Œ๋“œ๋Š” ๋งˆ๋ฒ• ์ฃผ๋ฌธ์„ ํ•œ ์ค„์”ฉ ์ฝ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ๊ฐ yield๋Š” ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ํ•„์š”์— ๋”ฐ๋ผ ํ•˜๋‚˜์”ฉ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ”๐Ÿ’ก

์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ํ๋ฆ„๋„ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ํ๋ฆ„ ์‹œ์ž‘ yield ์ข…๋ฃŒ next() ํ˜ธ์ถœ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์˜ ํ๋ฆ„์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์š”. ์‹œ์ž‘์ ์—์„œ ์ถœ๋ฐœํ•ด yield๋ฅผ ๋งŒ๋‚˜๋ฉด ์ž ์‹œ ๋ฉˆ์ถ”๊ณ , next()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋‹ค์‹œ ์‹คํ–‰๋˜์ฃ . ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์ฃผ๋ฌธ์„ ์™ธ์šฐ๋‹ค๊ฐ€ ์ž ์‹œ ์‰ฌ์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์™ธ์šฐ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋„ค์š”! ๐Ÿง™โ€โ™‚๏ธโœจ

๐Ÿ”„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ: ๋งˆ๋ฒ•์˜ ์ˆœํšŒ์ž ๐Ÿ”„

์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์™€ ์ง์„ ์ด๋ฃจ๋Š” ๋งˆ๋ฒ•์˜ ๋„๊ตฌ์˜ˆ์š”. ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋งˆ๋ฒ• ์ƒ์ž ์•ˆ์˜ ์•„์ดํ…œ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ๐ŸŽญ๐Ÿ”ฎ

์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ํŠน์ง•:

  • next() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”. ๐Ÿ”œ
  • next()๋Š” value์™€ done ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์š”. ๐Ÿ“ฆ
  • done์ด true๊ฐ€ ๋˜๋ฉด ์ˆœํšŒ๊ฐ€ ๋๋‚ฉ๋‹ˆ๋‹ค. ๐Ÿ

TypeScript์—์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณผ๊นŒ์š”? ๐Ÿ› ๏ธ


class NumberIterator implements Iterator<number> {
    private current = 0;
    private max: number;

    constructor(max: number) {
        this.max = max;
    }

    next(): IteratorResult<number> {
        if (this.current < this.max) {
            return { value: this.current++, done: false };
        } else {
            return { value: undefined, done: true };
        }
    }
}

const iterator = new NumberIterator(3);
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
  

์ด ์ฝ”๋“œ์—์„œ NumberIterator ํด๋ž˜์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ง€์ •๋œ ์ตœ๋Œ€๊ฐ’๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ˆœํšŒํ•˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ์–ด์š”. next() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ตœ๋Œ€๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด done: true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์žฌ๋Šฅ์„ ์ฐจ๋ก€๋Œ€๋กœ ์‚ดํŽด๋ณด๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ? ๐Ÿ’ป๐Ÿ”

์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋™์ž‘ ์›๋ฆฌ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋™์ž‘ ์›๋ฆฌ ์ปฌ๋ ‰์…˜ [1, 2, 3, 4, 5] 1 2 3 4 5 next() ํ˜ธ์ถœ๋งˆ๋‹ค ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋™

์ด ๊ทธ๋ฆผ์€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ, next() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ ์š”์†Œ๋กœ ์ด๋™ํ•˜์ฃ . ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ๋„๋‹ฌํ•˜๋ฉด ์ˆœํšŒ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋งˆ๋ฒ• ์ƒ์ž ์•ˆ์˜ ๋ณด๋ฌผ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ณด๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? ๐Ÿง™โ€โ™‚๏ธ๐Ÿ’Ž

๐ŸŒˆ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๋งˆ๋ฒ•์˜ ์กฐํ™” ๐ŸŒˆ

์ž, ์ด์ œ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋งˆ๋ฒ•์˜ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ€๋ณผ๊นŒ์š”? ์ด ๋‘˜์„ ์กฐํ•ฉํ•˜๋ฉด ์ •๋ง ๋†€๋ผ์šด ์ผ๋“ค์„ ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐ŸŽฉโœจ

์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์กฐํ™”๋กœ์šด ์‚ฌ์šฉ:

  • ๋ฌดํ•œํ•œ ์‹œํ€€์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ ๐Ÿ”„
  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๐Ÿ’พ
  • ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ„์†Œํ™” ๐Ÿง 

TypeScript์—์„œ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณผ๊นŒ์š”? ๐Ÿ”


function* fibonacciGenerator(): Generator<number, void, undefined> {
    let prev = 0;
    let curr = 1;
    while (true) {
        yield curr;
        [prev, curr] = [curr, prev + curr];
    }
}

const fibIterator = fibonacciGenerator();
for (let i = 0; i < 10; i++) {
    console.log(fibIterator.next().value);
}
  

์ด ์ฝ”๋“œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์ƒ์„ฑํ•˜๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ์–ด์š”. fibonacciGenerator ํ•จ์ˆ˜๋Š” ๋ฌดํ•œํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์ด์ฃ ! ๐Ÿงฎโœจ

์ด๋Ÿฐ ๊ธฐ๋ฒ•์€ ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค์— ๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ ์žฌ๋Šฅ ๋ชฉ๋ก์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ . ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋‹ˆ ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ์›น ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐Ÿš€๐Ÿ’ป

์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์กฐํ™” ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์กฐํ™” ์ œ๋„ค๋ ˆ์ดํ„ฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ yield next() ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„

์ด ๊ทธ๋ฆผ์€ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์กฐํ™”๋กญ๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ œ๋„ค๋ ˆ์ดํ„ฐ๋Š” yield๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ , ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” next()๋ฅผ ํ†ตํ•ด ๊ทธ ๊ฐ’์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋ฉด์„œ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฑฐ์ฃ . ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ์™€ ๊ฒฌ์Šต์ƒ์ด ์ฃผ๋ฌธ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™์•„์š”! ๐Ÿง™โ€โ™‚๏ธ๐Ÿง™โ€โ™€๏ธ

๐ŸŽญ ์‹ค์ „ ๋งˆ๋ฒ•: ๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด ๐ŸŽญ

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ์‹ค๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋†’์—ฌ๋ณผ ์‹œ๊ฐ„์ด์—์š”! ๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ์ตํžˆ๋ฉด ๋”์šฑ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ•์„ ๋ถ€๋ฆด ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๐Ÿง™โ€โ™‚๏ธโœจ

๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด:

  • ๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๐Ÿ”„
  • ์ œ๋„ค๋ ˆ์ดํ„ฐ ์œ„์ž„ ๐Ÿ‘‘
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๐Ÿ›ก๏ธ

1. ๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๐Ÿ”„

๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ํŠนํžˆ API ํ˜ธ์ถœ์ด๋‚˜ ํŒŒ์ผ ์ฝ๊ธฐ ๊ฐ™์€ ์ž‘์—…์—์„œ ์œ ์šฉํ•˜๋‹ต๋‹ˆ๋‹ค.


async function* asyncNumberGenerator() {
    for (let i = 0; i < 5; i++) {
        await new Promise(resolve => setTimeout(resolve, 1000));
        yield i;
    }
}

(async () => {
    for await (const num of asyncNumberGenerator()) {
        console.log(num);
    }
})();
  

์ด ์˜ˆ์ œ์—์„œ๋Š” 1์ดˆ๋งˆ๋‹ค ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์š”. for await...of ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ’์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์‹œ๊ฐ„์„ ์กฐ์ ˆํ•˜๋Š” ์ฃผ๋ฌธ์„ ์™ธ์šฐ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? โณโœจ

2. ์ œ๋„ค๋ ˆ์ดํ„ฐ ์œ„์ž„ ๐Ÿ‘‘

์ œ๋„ค๋ ˆ์ดํ„ฐ ์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์—์„œ ๋‹ค๋ฅธ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ๋นŒ๋ ค์˜ฌ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋ฒ•์ด๋ž๋‹ˆ๋‹ค.


function* numberGenerator() {
    yield 1;
    yield 2;
}

function* letterGenerator() {
    yield 'a';
    yield 'b';
}

function* combinedGenerator() {
    yield* numberGenerator();
    yield* letterGenerator();
    yield 'end';
}

for (const value of combinedGenerator()) {
    console.log(value);
}
  

์ด ์˜ˆ์ œ์—์„œ combinedGenerator๋Š” yield* ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ๋‘ ์ œ๋„ค๋ ˆ์ดํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ์œ„์ž„๋ฐ›์•„ ์‚ฌ์šฉํ•ด์š”. ๋งˆ์น˜ ์—ฌ๋Ÿฌ ๋งˆ๋ฒ•์‚ฌ์˜ ์ฃผ๋ฌธ์ฑ…์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋†“์€ ๊ฒƒ ๊ฐ™์ฃ ? ๐Ÿ“š๐Ÿ”ฎ

3. ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๐Ÿ›ก๏ธ

์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์—์„œ๋„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ์ค‘์š”ํ•ด์š”. try-catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.


function* errorGenerator() {
    try {
        yield 1;
        throw new Error('Oops!');
        yield 2; // ์ด ๋ถ€๋ถ„์€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์š”
    } catch (error) {
        console.log('Error caught:', error.message);
        yield 'Error handled';
    }
    yield 3;
}

const gen = errorGenerator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // Error caught: Oops! ๊ทธ๋ฆฌ๊ณ  'Error handled'
console.log(gen.next().value); // 3
  

์ด ์˜ˆ์ œ์—์„œ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์žก์•„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ‘์ž๊ธฐ ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ฃ . ๋งˆ์น˜ ๋งˆ๋ฒ• ์‹ค์ˆ˜๋ฅผ ๋ฐ”๋กœ์žก๋Š” ์ฃผ๋ฌธ๊ฐ™์•„์š”! ๐Ÿง™โ€โ™‚๏ธ๐Ÿ› ๏ธ

๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด ๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด ๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ ์œ„์ž„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐ•๋ ฅํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๋งˆ๋ฒ• ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ด ๊ทธ๋ฆผ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ, ์ œ๋„ค๋ ˆ์ดํ„ฐ ์œ„์ž„, ๊ทธ๋ฆฌ๊ณ  ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์กฐํ™”๋กญ๊ฒŒ ์–ด์šฐ๋Ÿฌ์ ธ ๊ฐ•๋ ฅํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๋งˆ๋ฒ•์„ ๋งŒ๋“ค์–ด๋‚ด์ฃ . ์ด ์„ธ ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ๊ฒฐํ•ฉ๋˜๋ฉด ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ๋งˆ์น˜ ์„ธ ๋ช…์˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ํž˜์„ ํ•ฉ์ณ ๋” ๊ฐ•๋ ฅํ•œ ์ฃผ๋ฌธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์•„์š”! ๐Ÿง™โ€โ™‚๏ธ๐Ÿง™โ€โ™€๏ธ๐Ÿง™โ€โ™‚๏ธ

์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๋“ค์€ ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠนํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์žฌ๋Šฅ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ๋™์‹œ์— ์—๋Ÿฌ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ฃ . ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ๊ฑฐ์˜ˆ์š”! ๐Ÿš€๐Ÿ’ป

๐ŸŽ“ ๋งˆ๋ฒ•์˜ ์™„์„ฑ: ์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ๐ŸŽ“

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๊ณ ๊ธ‰ ๋งˆ๋ฒ•์„ ์ตํ˜”์–ด์š”. ํ•˜์ง€๋งŒ ์ง„์ •ํ•œ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ์ง€์‹์„ ์‹ค์ „์— ์ ์šฉํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ด์š”. ์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ•์„ ๋”์šฑ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”? ๐Ÿง™โ€โ™‚๏ธโœจ

์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ํฌ์ธํŠธ:

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๐Ÿ—ƒ๏ธ
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™” ๐Ÿ’พ
  • ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ฆฌ ๐Ÿ”„
  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๐Ÿ“–

1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๐Ÿ—ƒ๏ธ

์ œ๋„ค๋ ˆ์ดํ„ฐ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ด์š”. ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .


function* chunkArray(array, chunkSize) {
    for (let i = 0; i < array.length; i += chunkSize) {
        yield array.slice(i, i + chunkSize);
    }
}

const largeArray = Array.from({ length: 1000000 }, (_, i) => i);
const chunkIterator = chunkArray(largeArray, 1000);

for (const chunk of chunkIterator) {
    console.log(`Processing chunk of size: ${chunk.length}`);
    // ์—ฌ๊ธฐ์„œ ๊ฐ ์ฒญํฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค
}
  

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐฐ์—ด์„ ์ž‘์€ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๊ฑฐ๋Œ€ํ•œ ๋งˆ๋ฒ• ์ฑ…์„ ํ•œ ํŽ˜์ด์ง€์”ฉ ์ฝ์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ๐Ÿ“š๐Ÿ”

2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™” ๐Ÿ’พ

์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌดํ•œ ์‹œํ€€์Šค๋„ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•˜๋‹ต๋‹ˆ๋‹ค.


function* infiniteCounter() {
    let i = 0;
    while (true) {
        yield i++;
    }
}

const counter = infiniteCounter();
for (let i = 0; i < 5; i++) {
    console.log(counter.next().value);
}
  

์ด ์˜ˆ์ œ๋Š” ๋ฌดํ•œํ•œ ์ˆซ์ž ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•ด์š”. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์ฃ . ๋งˆ์น˜ ๋ฌดํ•œํ•œ ๋งˆ๋ฒ• ์—๋„ˆ์ง€๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”! โ™พ๏ธโœจ

3. ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ฆฌ ๐Ÿ”„

๋น„๋™๊ธฐ ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ ์—ฌ๋Ÿฌ API๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ต๋‹ˆ๋‹ค.


async function* fetchUserData(userIds) {
    for (const id of userIds) {
        const response = await fetch(`https://api.example.com/users/${id}`);
        const userData = await response.json();
        yield userData;
    }
}

async function processUsers() {
    const userIds = [1, 2, 3, 4, 5];
    for await (const userData of fetchUserData(userIds)) {
        console.log(`Processing user: ${userData.name}`);
        // ์—ฌ๊ธฐ์„œ ๊ฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค
    }
}

processUsers();
  

์ด ์˜ˆ์ œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•ด์š”. ๊ฐ API ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ์ „์ฒด ์ž‘์—… ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์—ฌ๋Ÿฌ ๋งˆ๋ฒ• ์ฃผ๋ฌธ์„ ๋™์‹œ์— ์‹œ์ „ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”! ๐Ÿง™โ€โ™‚๏ธ๐Ÿ”ฎ

4. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๐Ÿ“–

์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋กœ์ง์„ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ ์ƒํƒœ ๊ธฐ๊ณ„(State Machine)๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ต๋‹ˆ๋‹ค.


function* createTaskManager() {
    let taskList = [];
    while (true) {
        const action = yield;
        if (action.type === 'ADD_TASK') {
            taskList.push(action.task);
        } else if (action.type === 'COMPLETE_TASK') {
            taskList = taskList.filter(task => task !== action.task);
        } else if (action.type === 'GET_TASKS') {
            yield taskList;
        }
    }
}

const taskManager = createTaskManager();
taskManager.next(); // ์ดˆ๊ธฐํ™”

taskManager.next({ type: 'ADD_TASK', task: '์ฝ”๋”ฉํ•˜๊ธฐ' });
taskManager.next({ type: 'ADD_TASK', task: '์šด๋™ํ•˜๊ธฐ' });
console.log(taskManager.next({ type: 'GET_TASKS' }).value);
taskManager.next({ type: 'COMPLETE_TASK', task: '์ฝ”๋”ฉํ•˜๊ธฐ' });
console.log(taskManager.next({ type: 'GET_TASKS' }).value);
  

์ด ์˜ˆ์ œ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํ•œ ์ž‘์—… ๊ด€๋ฆฌ์ž๋ฅผ ๊ตฌํ˜„ํ–ˆ์–ด์š”. ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ ๊น”๋”ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ณต์žกํ•œ ๋งˆ๋ฒ• ์˜์‹์„ ๊ฐ„๋‹จํ•œ ์ฃผ๋ฌธ์œผ๋กœ ์ •๋ฆฌํ•œ ๊ฒƒ ๊ฐ™์ฃ ? ๐Ÿ“œโœจ

์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ฆฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์œ ์—ฐํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ํšจ์œจ์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๋งˆ๋ฒ•

์ด ๊ทธ๋ฆผ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ๊ธฐ๋ฒ•๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”, ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ฆฌ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ, ๊ทธ๋ฆฌ๊ณ  ์œ ์—ฐํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์–ด์šฐ๋Ÿฌ์ ธ ํšจ์œจ์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ์ œ๋„ค๋ ˆ์ดํ„ฐ ๋งˆ๋ฒ•์„ ๋งŒ๋“ค์–ด๋‚ด์ฃ . ์ด ๋ชจ๋“  ์š”์†Œ๋“ค์ด ์กฐํ™”๋กญ๊ฒŒ ์ž‘์šฉํ•˜๋ฉด, ์ •๋ง ๋†€๋ผ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งˆ๋ฒ•์„ ๋ถ€๋ฆด ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐ŸŒŸ๐Ÿ”ฎ

์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๋“ค์€ ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠนํžˆ ๋น›์„ ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž์˜ ์žฌ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ฒœ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๋ฉฐ, ๋™์‹œ์— ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์ฃ . ์ด๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ๋” ํšจ์œจ์ ์ธ ์ž‘์—… ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์ค„ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€๐Ÿ’ป

๐Ÿ† ๋งˆ๋ฒ•์‚ฌ์˜ ๊ธธ: ๊ฒฐ๋ก  ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„ ๐Ÿ†

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค, ์—ฌ๋Ÿฌ๋ถ„! ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ•์„ ์ตํžŒ ์ง„์ •ํ•œ TypeScript ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์—ˆ์–ด์š”. ๐ŸŽ‰๐Ÿง™โ€โ™‚๏ธ

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ํ•ต์‹ฌ ํฌ์ธํŠธ:

  • ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๐ŸŒฑ
  • ๊ณ ๊ธ‰ ์ œ๋„ค๋ ˆ์ดํ„ฐ ํŒจํ„ด ๐ŸŒŸ
  • ์‹ค์ „ ์‘์šฉ๊ณผ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๐Ÿ’ช
  • ์ฝ”๋“œ์˜ ํšจ์œจ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๐Ÿ“ˆ

์ด ์ง€์‹๋“ค์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Šฅ๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋†’์—ฌ์ค„ ๊ฑฐ์˜ˆ์š”. ํ•˜์ง€๋งŒ ์ง„์ •ํ•œ ๋งˆ๋ฒ•์‚ฌ์˜ ์—ฌ์ •์€ ์—ฌ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์•„์š”. ๊ณ„์†ํ•ด์„œ ์—ฐ์Šตํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ํƒ๊ตฌํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋…ํŠนํ•œ ๋งˆ๋ฒ•์„ ๊ฐœ๋ฐœํ•ด ๋‚˜๊ฐ€์„ธ์š”!

๐Ÿš€ ๋‹ค์Œ ๋‹จ๊ณ„: ๋” ๋†’์€ ๊ณณ์„ ํ–ฅํ•ด

  1. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๊ธฐ: ์—ฌ๋Ÿฌ๋ถ„์˜ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ ์šฉํ•ด๋ณด์„ธ์š”. ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ๋˜๋Š”์ง€ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”.
  2. ๋‹ค๋ฅธ ๊ณ ๊ธ‰ TypeScript ๊ธฐ๋Šฅ ํƒ๊ตฌ: ์ œ๋„ค๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์™ธ์—๋„ TypeScript์—๋Š” ๋งŽ์€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ์–ด์š”. ๊ณ„์†ํ•ด์„œ ํ•™์Šตํ•ด ๋‚˜๊ฐ€์„ธ์š”.
  3. ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ง€์‹ ๊ณต์œ : ์—ฌ๋Ÿฌ๋ถ„์ด ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๊ณต์œ ํ•ด๋ณด์„ธ์š”. ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ๋„ ๋ฐฐ์šฐ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ž๋‹ˆ๋‹ค.
  4. ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ: ์ œ๋„ค๋ ˆ์ดํ„ฐ๋‚˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•ด๋ณด์„ธ์š”. ์‹ค์ œ ์„ธ๊ณ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฌ์ •์— ์ด ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋“ค์ด ํฐ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ์š”. ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ์ด๋Ÿฐ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๋“ค์€ ์ •๋ง ๋น›์„ ๋ฐœํ•  ๊ฑฐ์˜ˆ์š”. ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„, ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ํ…Œ๋‹ˆ๊นŒ์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ, ํ•ญ์ƒ ๊ธฐ์–ตํ•˜์„ธ์š”. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ์ด์ƒ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์„ธ์ƒ์„ ๋” ๋‚˜์€ ๊ณณ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์žฌ๋Šฅ๊ณผ ์ง€์‹์œผ๋กœ ์„ธ์ƒ์— ๊ธ์ •์ ์ธ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€์„ธ์š”!

์ž, ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋งˆ๋ฒ•์œผ๋กœ ์ฝ”๋”ฉ ์„ธ๊ณ„๋ฅผ ์ •๋ณตํ•˜๋Ÿฌ ๊ฐ€๋ณผ๊นŒ์š”? ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค, ํ›Œ๋ฅญํ•œ TypeScript ๋งˆ๋ฒ•์‚ฌ๋“ค์ด์—ฌ! ๐ŸŒŸ๐Ÿง™โ€โ™‚๏ธ๐Ÿš€

๋งˆ๋ฒ•์‚ฌ์˜ ์—ฌ์ • ๋งˆ๋ฒ•์‚ฌ์˜ ์—ฌ์ • ๊ธฐ์ดˆ ํ•™์Šต ์‹ค์ „ ์‘์šฉ ์ตœ์ ํ™” ํ˜์‹  ๋Š์ž„์—†๋Š” ํ•™์Šต๊ณผ ์„ฑ์žฅ

์ด ๊ทธ๋ฆผ์€ TypeScript ๋งˆ๋ฒ•์‚ฌ๋กœ์„œ์˜ ์—ฌ๋Ÿฌ๋ถ„์˜ ์—ฌ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ธฐ์ดˆ ํ•™์Šต์—์„œ ์‹œ์ž‘ํ•ด, ์‹ค์ „ ์‘์šฉ์„ ๊ฑฐ์ณ, ์ตœ์ ํ™” ๋‹จ๊ณ„๋ฅผ ์ง€๋‚˜, ๊ถ๊ทน์ ์œผ๋กœ๋Š” ํ˜์‹ ์„ ์ด๋ฃจ๋Š” ๊ณผ์ •์ด์—์š”. ์ด ์—ฌ์ •์€ ๋Š์ž„์—†๋Š” ํ•™์Šต๊ณผ ์„ฑ์žฅ์˜ ๊ณผ์ •์ด๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋„์ „๊ณผ ๊ธฐํšŒ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ TypeScript ๋งˆ๋ฒ•์ด ์„ธ์ƒ์„ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ฌ์ง€ ์ •๋ง ๊ธฐ๋Œ€๋˜๋„ค์š”! ๐ŸŒŸ๐Ÿš€