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)
![[ํ์
์คํฌ๋ฆฝํธ] ์ถ์ํ๋ฅผ ์ด์ฉํด์ ํด๋์ค ๊ฐ์ ํ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ8TsO%2FbtrzUjymBM4%2FDPoMKekZ7yEdKcttnHI4I0%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ์ถ์ํ๋ฅผ ์ด์ฉํด์ ํด๋์ค ๊ฐ์ ํ๊ธฐ
- ์ธ๋ถ์์ ํด๋์ค๋ฅผ ๋ฐ๋ผ ๋ดค์ ๋, ์ฌ์ฉํด์ผ ํ ํจ์๊ฐ ๋๋ฌด ๋ง์ด ๋จ๋ฉด ์ฌ์ฉ์๋ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ์ง ํผ๋์ค๋ฌ์ธ ์ ์๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๋์ ํ ์ ์๋ ๊ฐ๋ ์ด ๋ฐ๋ก '์ถ์ํ'์ด๋ค. ์ ๋ง ํ์ํ 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) ์ถ๋ก ๊ณผ ๋ช
์](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDYcOs%2FbtrzVBrbDFg%2Fw9k1tIJiVCCoGoKUTXvcK0%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ์ ๋๋ ์ดํฐ, ๋ฐ๋ณต์(iterator) ์ถ๋ก ๊ณผ ๋ช ์
Generator ํ์ ์คํฌ๋ฆฝํธ๋ Generator๊ฐ yield๋ฅผ ํตํด ๋ฐฉ์ถํ ๊ฐ์ ํ ๋๋ก ๋ฐ๋ณต์์ ํ์ ์ ์ถ๋ก ํ๋ค. ์ ๋๋ ์ดํฐ ํจ์ ๋ฐ๋ณต์(iterator)์ ์ ๋๋ ์ดํฐ๋ ์์๊ด๊ณ๋ค. ์ ๋๋ ์ดํฐ๋ก ๊ฐ์ ์คํธ๋ฆผ์ ์์ฑํ ์ ์๊ณ ๋ฐ๋ณต์๋ก ์์ฑ๋ ๊ฐ์ ์๋นํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ดํฐ๋ฌ๋ธ(iterable;๋ฐ๋ณตํ ์ ์๋)Symbol.iterator ๋ผ๋ ํ๋กํผํฐ(๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ ํจ์)๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ์ฒด ๋ฐ๋ณต์(iterator)next๋ผ๋ ๋ฉ์๋(value, done ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํ)๋ฅผ ์ ์ํ ๊ฐ์ฒด ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ดํฐ๋ฌ๋ธ ๋ฐ๋ณต์(IterableIterator)๊ฐ ๋ฐํ๋๋ค. ํ์ ์คํฌ๋ฆฝํธ์์๋ ์ง์ํ๋ค. //๋ค์ ํผ๋ณด๋์น ์ซ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด a์ b๋ฅผ, b์ a+b๋ฅผ..
![[ํ์
์คํฌ๋ฆฝํธ] ์ปคํผ๋จธ์ ํด๋์ค๋ง๋ค๊ธฐ ์ค์ต](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0jrSr%2FbtrzSyuaksJ%2F2dazLGwACZ4bL19jXVLis1%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ์ปคํผ๋จธ์ ํด๋์ค๋ง๋ค๊ธฐ ์ค์ต
//์ปคํผ๋จธ์ ๋ง๋ค๊ธฐ 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 ๊ด๋ จ ์ค๋ฅ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZFvxP%2FbtrzL9IYNj3%2FC5iXpPENrKvFTPpwzBvtWK%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] 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..