๐ ์ ๋ค๋ ์ดํฐ ํจ์์ ์ดํฐ๋ ์ดํฐ ๊ตฌํ: 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()๊ฐ ํธ์ถ๋๋ฉด ๋ค์ ์คํ๋์ฃ . ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๋ง์ง๋ง์ ์ข ๋ฃ๋ฉ๋๋ค. ๋ง์น ๋ง๋ฒ์ฌ๊ฐ ์ฃผ๋ฌธ์ ์ธ์ฐ๋ค๊ฐ ์ ์ ์ฌ์๋ค๊ฐ ๋ค์ ์ธ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค์! ๐งโโ๏ธโจ
๐ ์ดํฐ๋ ์ดํฐ: ๋ง๋ฒ์ ์ํ์ ๐
์ดํฐ๋ ์ดํฐ๋ ์ ๋ค๋ ์ดํฐ ํจ์์ ์ง์ ์ด๋ฃจ๋ ๋ง๋ฒ์ ๋๊ตฌ์์. ์ดํฐ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์ ์์๋ฅผ ํ๋์ฉ ์ํํ ์ ์๋ต๋๋ค. ๋ง์น ๋ง๋ฒ์ฌ๊ฐ ๋ง๋ฒ ์์ ์์ ์์ดํ ์ ํ๋์ฉ ๊บผ๋ด๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ฃ ! ๐ญ๐ฎ
์ดํฐ๋ ์ดํฐ์ ํน์ง:
- 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๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ฐ ์ดํฐ๋ ์ดํฐ๋ ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์์ฐจ์ ์ผ๋ก ํ์ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ด์. ์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์ฌ๋ฅ์ ์ฐจ๋ก๋๋ก ์ดํด๋ณด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ํ์ฉํ ์ ์๊ฒ ์ฃ ? ๐ป๐
์ด ๊ทธ๋ฆผ์ ์ดํฐ๋ ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ปฌ๋ ์ ์ ๊ฐ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ฉด์, 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()๋ฅผ ํตํด ๊ทธ ๊ฐ์ ์๋นํฉ๋๋ค. ์ด ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ด ๋ง๋ค์ด์ง๋ ๊ฑฐ์ฃ . ๋ง์น ๋ง๋ฒ์ฌ์ ๊ฒฌ์ต์์ด ์ฃผ๋ฌธ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ ๊ฐ์์! ๐งโโ๏ธ๐งโโ๏ธ
๐ญ ์ค์ ๋ง๋ฒ: ๊ณ ๊ธ ์ ๋ค๋ ์ดํฐ ํจํด ๐ญ
์, ์ด์ ์ฐ๋ฆฌ์ ๋ง๋ฒ ์ค๋ ฅ์ ํ ๋จ๊ณ ๋ ๋์ฌ๋ณผ ์๊ฐ์ด์์! ๊ณ ๊ธ ์ ๋ค๋ ์ดํฐ ํจํด์ ์ตํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํ ๋ง๋ฒ์ ๋ถ๋ฆด ์ ์๋ต๋๋ค. ๐งโโ๏ธโจ
๊ณ ๊ธ ์ ๋ค๋ ์ดํฐ ํจํด:
- ๋น๋๊ธฐ ์ ๋ค๋ ์ดํฐ ๐
- ์ ๋ค๋ ์ดํฐ ์์ ๐
- ์๋ฌ ์ฒ๋ฆฌ ๐ก๏ธ
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 ๋ง๋ฒ์ฌ๊ฐ ๋์์ด์. ๐๐งโโ๏ธ
์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ํต์ฌ ํฌ์ธํธ:
- ์ ๋ค๋ ์ดํฐ์ ์ดํฐ๋ ์ดํฐ์ ๊ธฐ๋ณธ ๊ฐ๋ ๐ฑ
- ๊ณ ๊ธ ์ ๋ค๋ ์ดํฐ ํจํด ๐
- ์ค์ ์์ฉ๊ณผ ์ต์ ํ ๊ธฐ๋ฒ ๐ช
- ์ฝ๋์ ํจ์จ์ฑ๊ณผ ๊ฐ๋ ์ฑ ํฅ์ ๐
์ด ์ง์๋ค์ ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์ ํ ๋จ๊ณ ๋ ๋์ฌ์ค ๊ฑฐ์์. ํ์ง๋ง ์ง์ ํ ๋ง๋ฒ์ฌ์ ์ฌ์ ์ ์ฌ๊ธฐ์ ๋๋์ง ์์์. ๊ณ์ํด์ ์ฐ์ตํ๊ณ , ์๋ก์ด ๊ธฐ์ ์ ํ๊ตฌํ๋ฉฐ, ์ฌ๋ฌ๋ถ๋ง์ ๋ ํนํ ๋ง๋ฒ์ ๊ฐ๋ฐํด ๋๊ฐ์ธ์!
๐ ๋ค์ ๋จ๊ณ: ๋ ๋์ ๊ณณ์ ํฅํด
- ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๊ธฐ: ์ฌ๋ฌ๋ถ์ ํ์ฌ ํ๋ก์ ํธ์ ์ ๋ค๋ ์ดํฐ์ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ ์ฉํด๋ณด์ธ์. ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๊ฐ์ ๋๋์ง ์ง์ ๊ฒฝํํด๋ณด์ธ์.
- ๋ค๋ฅธ ๊ณ ๊ธ TypeScript ๊ธฐ๋ฅ ํ๊ตฌ: ์ ๋ค๋ ์ดํฐ์ ์ดํฐ๋ ์ดํฐ ์ธ์๋ TypeScript์๋ ๋ง์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ด ์์ด์. ๊ณ์ํด์ ํ์ตํด ๋๊ฐ์ธ์.
- ์ปค๋ฎค๋ํฐ์ ์ง์ ๊ณต์ : ์ฌ๋ฌ๋ถ์ด ๋ฐฐ์ด ๋ด์ฉ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ๊ณต์ ํด๋ณด์ธ์. ๊ฐ๋ฅด์น๋ ๊ฒ๋ ๋ฐฐ์ฐ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋๋๋ค.
- ์คํ ์์ค ํ๋ก์ ํธ ์ฐธ์ฌ: ์ ๋ค๋ ์ดํฐ๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํด๋ณด์ธ์. ์ค์ ์ธ๊ณ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝํ์ ํ ์ ์์ ๊ฑฐ์์.
์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ฌ์ ์ ์ด ๊ฐ๋ ฅํ ๋๊ตฌ๋ค์ด ํฐ ๋์์ด ๋๊ธธ ๋ฐ๋ผ์. ์ฌ๋ฅ๋ท๊ณผ ๊ฐ์ ํ๋ซํผ์ ๊ฐ๋ฐํ ๋, ์ด๋ฐ ๊ณ ๊ธ ๊ธฐ์ ๋ค์ ์ ๋ง ๋น์ ๋ฐํ ๊ฑฐ์์. ์ฌ์ฉ์๋ค์๊ฒ ๋ ๋์ ๊ฒฝํ์, ๊ฐ๋ฐ์๋ค์๊ฒ๋ ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์ ๊ณตํ ์ ์์ ํ ๋๊น์.
๋ง์ง๋ง์ผ๋ก, ํญ์ ๊ธฐ์ตํ์ธ์. ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํ ์ฝ๋ ์์ฑ ์ด์์ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ธ์์ ๋ ๋์ ๊ณณ์ผ๋ก ๋ง๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์์. ์ฌ๋ฌ๋ถ์ ์ฌ๋ฅ๊ณผ ์ง์์ผ๋ก ์ธ์์ ๊ธ์ ์ ์ธ ๋ณํ๋ฅผ ๋ง๋ค์ด ๋๊ฐ์ธ์!
์, ์ด์ ์ฌ๋ฌ๋ถ๋ง์ ๋ง๋ฒ์ผ๋ก ์ฝ๋ฉ ์ธ๊ณ๋ฅผ ์ ๋ณตํ๋ฌ ๊ฐ๋ณผ๊น์? ํ์ด์ ๋น๋๋ค, ํ๋ฅญํ TypeScript ๋ง๋ฒ์ฌ๋ค์ด์ฌ! ๐๐งโโ๏ธ๐
์ด ๊ทธ๋ฆผ์ TypeScript ๋ง๋ฒ์ฌ๋ก์์ ์ฌ๋ฌ๋ถ์ ์ฌ์ ์ ๋ณด์ฌ์ค๋๋ค. ๊ธฐ์ด ํ์ต์์ ์์ํด, ์ค์ ์์ฉ์ ๊ฑฐ์ณ, ์ต์ ํ ๋จ๊ณ๋ฅผ ์ง๋, ๊ถ๊ทน์ ์ผ๋ก๋ ํ์ ์ ์ด๋ฃจ๋ ๊ณผ์ ์ด์์. ์ด ์ฌ์ ์ ๋์์๋ ํ์ต๊ณผ ์ฑ์ฅ์ ๊ณผ์ ์ด๋ฉฐ, ๊ฐ ๋จ๊ณ๋ง๋ค ์๋ก์ด ๋์ ๊ณผ ๊ธฐํ๊ฐ ์ฌ๋ฌ๋ถ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ต๋๋ค. ์ฌ๋ฌ๋ถ์ TypeScript ๋ง๋ฒ์ด ์ธ์์ ์ด๋ป๊ฒ ๋ณํ์ํฌ์ง ์ ๋ง ๊ธฐ๋๋๋ค์! ๐๐
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ