일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 구현
- 개발자북클럽
- 이진탐색
- 앱개발
- 타입스크립트
- 코딩테스트
- 빅데이터분석
- bfs
- 백준온라인저지
- c++
- 백준
- react-native
- ps
- 프로그래머스
- SQL
- 이것이코딩테스트다
- 알고리즘
- Typescript
- 이코테
- BOJ
- 노마드코더
- 정렬
- 코딩일기
- 코테
- DP
- TS
- dfs
- 다이나믹프로그래밍
- 최단경로
- 그리디
- Today
- Total
목록프론트엔드/TypeScript (9)
한량처럼 살고 싶다

1. abstract class(추상클래스) 의 장점과 사용법 1) abstract class(추상클래스) 장점 추상 클래스는 상속받을 클래스가 어떻게 정의되어야 하는지 가이드라인을 제공해준다. 2) abstract class(추상클래스) 사용법 abstract class User { constructor( protected firstName: string, protected lastName: string, ) {} abstract sayHi(name: string):string abstract fullName():string } class Player extends User { //abstract 함수를 구현해야 함. fullName(){ return `${this.firstName} ${this.la..

1. 타입을 지정하는 기존 방법 type Team = "red" | "blue" | "yellow" type Health = 1 | 5 | 10 type Player = { nickname: string, team: Team, health: Health } const hy:Player = { nickname: "hy", team: "red", health: 10 } 2. Interface 오브젝트의 모양을 정의하기 위해서 사용한다. 위와 아래는 동일한 코드지만 type 이 아닌, interface로 지정했다는 차이점을 갖는다. type Team = "red" | "blue" | "yellow" type Health = 1 | 5 | 10 interface Player { nickname: string, ..

1. Class 타입스크립트는 객체지향 언어이므로 Class를 만들 수 있다. 특징은 아래와 같다. private 키워드가 붙어있는 멤버변수는 외부에서 접근할 수 없다. (처음에 생성자로 객체를 만들 때는 가능함) public 키워드가 붙어있는 멤버변수는 외부에서 접근이 가능하고, 수정도 가능하다. 함수 앞에도 private를 붙일 수 있다. private으로 정한 멤버변수는 상속받은 클래스에서도 접근이 불가능하다. 아래 코드에서 에러발생이라고 적힌 코드는 'Player는 firstName 이란 멤버를 갖지 않는다.' 라고 에러가 난다(wow!) 만약 Player 클래스의 구조를 전혀 모르고 생성도 하지 않은 사람은 Player클래스를 사용할 때 firstname이란 멤버변수가 있는지조차 모르는 것이다...

1. generic 응용1 function 을 깔끔하게 아래처럼 작성할 수도 있다. 안에 들어간 것을 generic으로 생각한다고 보면 된다. 그리고 a는 우리가 number라고 타입을 적어주었지만, 아무것도 적지 않아도 타입스크립트가 자동으로 타입을 유추할 수 있으니 굳이 써주지 않아도 좋다. function superPrint(a:T[]){ return a[0]; } const a = superPrint([1,2,3,4]); const b = superPrint([1,2,3,4]); 2. generic 응용2 type Player = { name:string, extraInfo: E } type HYExtra = { favFood: string } type HYPlayer = Player const ..

1. Polymorphism (다형성) 다형성이란 같은 데이터 타입의 함수에서 다른 기능이 발생할 수 있는 특징을 이야기한다. 다형성에는 static 과 dynamic 두 가지가 있다. static: 함수의 이름이 같지만 인자의 타입과 리턴 타입을 다르게 하여 다형성을 가짐 -> overloading dynamic: 함수의 이름과 인자, 리턴 타입이 전부 같지만 내부 동작이 달라지면서 다형성을 가짐 -> overriding 다이나믹 개념은 클래스에서 더 다루도록 한다. 오버로딩은 이전 포스팅 (https://tooyoung.tistory.com/180) 에서 다뤘던 오버로딩과 같은 말이다. 이 포스팅에서는 오버로딩을 좀 더 편하게 할 수 있게 해주는 generic에 대해서 본다. 2. generic 아래..

1. call signature (시그니처) 아래 코드 블럭에 적힌 함수의 signature란 다음과 같다: const add: (a:number, b: number) => number 이처럼 call signature란 이 함수의 원형에 명시된 매개변수 리스트가 정의된 것을 말한다. const add = (a: number, b:number) => { return(a+b); } 이런 함수의 signature를 우리가 정해줄 수도 있다. 아래 코드를 보면 type Add를 정의해줌으로써 함수의 signature를 우리가 만들어주었다. 그 다음, 밑의 const add 변수에 이 타입을 지정해주었다. 이렇게 함수의 signature를 정의해준 다음, 이 타입을 할당해주면 매개변수에 일일이 타입을 적어줄 필..

1. unknown 해당 변수로 작업을 할 때, 그 변수의 타입을 확인하는 과정을 거쳐야만 작업이 가능하다. let a: unknown; let b = a + 1; //에러 발생 if (typeof a === 'number') { b = a + 1; } 2. void 함수에서 어떤 것도 리턴하지 않을 때 void를 타입으로 지정한다. 참고로 타입스크립트는 똑똑해서 void를 쓰지 않아도 알아서 void로 인식한다. function hello():void{ console.log('x'); } const a = hello(); a.toUpperCase(); //에러 발생 3. never 함수가 절대 리턴을 하지 않고, exception/오류 등을 발생시키는 함수일 때만 사용한다. 아래처럼 생긴 코드에서는 문..

1. readonly readonly 태그를 넣을 경우, 해당 사용자는 그 변수의 내용을 바꿀 수 없음 const numbers: readonly number[] = [1,2,3,4] numbers.push(5) //에러 발생 2. Tuple const player: [string, number, boolean] = ["hy", 25, true] const player: [string, number, boolean] = ["hy", 25] //에러, boolean이 없음 const player: [string, number, boolean] = ["hy", true] //에러, number가 없음 player[0] = 3 //에러, 3은 string이 아님 player 변수는 [string, number..