TypeScript

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜(ํƒ€์ž…์‹œ๊ทธ๋‹ˆ์ฒ˜)๋ž€?

    ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ž€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋งํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋งˆ๋‹ค ์‹œ๊ทธ๋‹ˆ์ณ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ ๋Œ€์ฒด์ ์œผ๋กœ ์•„๋ž˜์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ํ•จ์ˆ˜์˜ ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์˜ ๊ฐœ์ˆ˜ (์˜ต์…”๋„) ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜• (์˜ต์…”๋„) ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์˜ ์ž๋ฃŒํ˜• ๋งŒ์•ฝ ๋‘ ํ•จ์ˆ˜์˜ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜, ๊ทธ ํƒ€์ž…์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ์ด ๋‘ ํ•จ์ˆ˜์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜์˜ ์ „์ฒด ํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• function sum(a: number, b: number): number { return a + b; } numberํƒ€์ž…์˜ ์ธ์ž ๋‘๊ฐœ๋ฅผ ๋ฐ›์•„ numberํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋œป์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜ ํƒ€์ž… ๋ฌธ๋ฒ• (a: number, b: number) => number ์ด๋Ÿฐ ์‹์˜ ํ‘œํ˜„์„ ํ˜ธ์ถœ ์‹œ..

    TS๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜, ์ค‘์ฒฉ ํ•จ์ˆ˜, ๊ณ ์ฐจ ํ•จ์ˆ˜ ๊ตฌํ˜„

    darren, dev blog :: TS๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜, ์ค‘์ฒฉ ํ•จ์ˆ˜, ๊ณ ์ฐจ ํ•จ์ˆ˜ ๊ตฌํ˜„ (tistory.com)

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ถ”์ƒํ™”๋ฅผ ์ด์šฉํ•ด์„œ ํด๋ž˜์Šค ๊ฐœ์„ ํ•˜๊ธฐ

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ถ”์ƒํ™”๋ฅผ ์ด์šฉํ•ด์„œ ํด๋ž˜์Šค ๊ฐœ์„ ํ•˜๊ธฐ

    - ์™ธ๋ถ€์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ฐ”๋ผ ๋ดค์„ ๋•Œ, ์‚ฌ์šฉํ•ด์•ผ ํ•  ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋œจ๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด ๋ฐ”๋กœ '์ถ”์ƒํ™”'์ด๋‹ค. ์ •๋ง ํ•„์š”ํ•œ api๋“ค๋งŒ ๋…ธ์ถœํ•จ์œผ๋กœ์จ ํด๋ž˜์Šค๋ฅผ ๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ฒŒ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ปคํ”ผ๋จธ์‹  ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. // //์ปคํ”ผ๋จธ์‹  ๋งŒ๋“ค๊ธฐ type CoffeeCup = { orderShot: number; }; class coffeeMachine { private static ONE_SHOT_CAPSULE: number = 3; private static ONE_CUP_WATER: number = 10; static makeMachine(beans: number, water: number):..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์บก์Šํ™”, ์ถ”์ƒํ™” ์ฐจ์ด ๋ช…ํ™•ํ•˜๊ธฐ ์žก๊ธฐ

    OOP ์ž์ฒด๊ฐ€ ์„ธ์ƒ์— ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ๋”ฐ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ๋“ค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฐœ๋…์ด๊ณ  ์บก์Šํ™”์™€ ์ถ”์ƒํ™”๋Š” ์•„์ด๋””์–ด ์ž์ฒด๋Š” ๊ณต์œ ํ•˜์ง€๋งŒ ์‚ฌ๋ญ‡ ๊ฐˆ๋ž˜๊ฐ€ ๋‹ค๋ฅธ ๋Š๋‚Œ์ด๋‹ค. ์บก์Šํ™”๋Š” ์„ธ์ƒ์— ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ๋”ฐ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ทธ ๊ฐ์ฒด๊ฐ€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. [๋”ฐ๋ผ๋‚˜์˜ค๋Š” ๊ฐœ๋… : ์ •๋ณด์€๋‹‰, private/public/protected, getter/setter] ์ถ”์ƒํ™”๋Š” ์„ธ์ƒ์— ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ๋”ฐ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ถ”์ƒ์ ์œผ๋กœ ์ƒ๊ฐํ•ด ํด๋ž˜์Šค ์•ˆ์— ์ตœ์†Œ ๋“ค์–ด๊ฐ€์•ผ๊ฒ ๋‹ค ์‹ถ์€ ๊ณตํ†ต์ ์ธ ์š”์†Œ๋‚˜ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋“ค์„ ๋„ฃ์–ด์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. [๋”ฐ๋ผ ๋‚˜์˜ค๋Š” ๊ฐœ๋… : ์ถ”์ƒํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค] ์บก์Šํ™”๋ž€, ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ์™€ ๋ณ€์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด๊ณ , ์ •๋ณด ์€..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜

    ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ํ•จ์ˆ˜์˜ ์ „์ฒด ํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. object๋กœ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ function์€ ๋ชจ๋“  ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ๋œปํ•  ๋ฟ์ด๋ฉฐ, ๊ทธ๊ฒƒ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์ • ํ•จ์ˆ˜์™€ ํƒ€์ž…๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค. function sum(a: number, b: number): number { return a + b; } ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„ sum์˜ ํƒ€์ž…์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•ด๋ณด์ž. sum์€ ๋‘ ๊ฐœ์˜ number์„ ์ธ์ˆ˜๋กœ ๋ฐ›์•„ ํ•œ ๊ฐœ์˜ number๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋Š” ํ•จ์ˆ˜๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. (a:number, b:number)=> number ์œ„ ์ฝ”๋“œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜ ํƒ€์ž… ๋ฌธ๋ฒ•์œผ๋กœ, ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜(call signature) ๋˜๋Š” ํƒ€์ž…..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ œ๋„ˆ๋ ˆ์ดํ„ฐ, ๋ฐ˜๋ณต์ž(iterator) ์ถ”๋ก ๊ณผ ๋ช…์‹œ

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ œ๋„ˆ๋ ˆ์ดํ„ฐ, ๋ฐ˜๋ณต์ž(iterator) ์ถ”๋ก ๊ณผ ๋ช…์‹œ

    Generator ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” Generator๊ฐ€ yield๋ฅผ ํ†ตํ•ด ๋ฐฉ์ถœํ•œ ๊ฐ’์„ ํ† ๋Œ€๋กœ ๋ฐ˜๋ณต์ž์˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•œ๋‹ค. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ๋ฐ˜๋ณต์ž(iterator)์™€ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋Š” ์ƒ์ƒ๊ด€๊ณ„๋‹ค. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋กœ ๊ฐ’์˜ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋ณต์ž๋กœ ์ƒ์„ฑ๋œ ๊ฐ’์„ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ดํ„ฐ๋Ÿฌ๋ธ”(iterable;๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š”)Symbol.iterator ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ(๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜)๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ๊ฐ์ฒด ๋ฐ˜๋ณต์ž(iterator)next๋ผ๋Š” ๋ฉ”์„œ๋“œ(value, done ๋‘ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜)๋ฅผ ์ •์˜ํ•œ ๊ฐ์ฒด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ดํ„ฐ๋Ÿฌ๋ธ” ๋ฐ˜๋ณต์ž(IterableIterator)๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์ง€์›ํ•œ๋‹ค. //๋‹ค์Œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด a์— b๋ฅผ, b์— a+b๋ฅผ..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ปคํ”ผ๋จธ์‹  ํด๋ž˜์Šค๋งŒ๋“ค๊ธฐ ์‹ค์Šต

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ปคํ”ผ๋จธ์‹  ํด๋ž˜์Šค๋งŒ๋“ค๊ธฐ ์‹ค์Šต

    //์ปคํ”ผ๋จธ์‹  ๋งŒ๋“ค๊ธฐ type CoffeeCup = { orderShot: number; }; class coffeeMachine { private static ONE_SHOT_CAPSULE: number = 3; private static ONE_CUP_WATER: number = 10; static makeMachine(beans: number, water: number): coffeeMachine { return new coffeeMachine(beans, water); } constructor(private capsule: number = 3, private water: number = 10) {} makeCoffee(orderShot: number): CoffeeCup { if (this.caps..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์ง€์›, ๋ช…์‹œ

    ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ’์„ ์ƒ์‚ฐํ•˜๋Š” ์†๋„๋„ ์ •๊ตํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. //๋‹ค์Œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด a์— b๋ฅผ, b์— a+b๋ฅผ ํ•œ๋ฒˆ์— ๋‹ค์‹œ ํ• ๋‹นํ•œ๋‹ค. function* createFibonacciGenerator() { let a = 0; let b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } let fiboancciGenerator = createFibonacciGenerator(); //IterableIterator console.log(fiboancciGenerator.next()); //{ value: 0, done: false } console.l..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] this ๊ด€๋ จ ์˜ค๋ฅ˜

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] this ๊ด€๋ จ ์˜ค๋ฅ˜

    function fancyDate() { return console.log( `${this.getDate()} / ${this.getMonth()} / ${this.getFullYear()}` ); } fancyDate.call(new Date()); src/index.ts:74:8 - error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation. 74 `${this.getDate()} / ${this.getMonth()} / ${this.getFullYear()}` ~~~~ src/index.ts:74:28 - error TS2683: 'this' implicitly has type 'any' becau..