일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 앙상블
- docker
- npm
- var
- VUE
- webpack
- machine learning
- condition
- 보안
- property
- vuetify
- git
- C#
- generic
- dotenv
- vue.js
- TypeScript
- scss
- type
- nginx
- JavaScript
- security
- Clone
- bash
- BOJ
- AI
- Python
- leetcode
- loop
- C++
- Today
- Total
ice rabbit programming
[JS][TS] Typescript에서의 Interface 본문
타입스크립트에서는 타입의 정적 체크와 더불어, OOP의 인터페이스와 클래스도 지원한다. 용법은 C#이나 자바에서의 용법과 비슷하다.
인터페이스 자체에 관한 이야기는 다른 OOP 언어에서 다루었을 것이므로, 간단하게만 짚고 넘어가겠다. 인터페이스를 사용함으로 겹치는 규격을 정하여 규격(형태)이 같은 클래스 간에 재사용성을 높이고, 클래스 간의 결합도를 줄일 수 있다. (자세한 내용은 추상 클래스 혹은 인터페이스를 찾아보자)
interface Person {
name: string;
age: number;
}
const person: Person = {
name: 'KDH',
age: 35
}
만약 자바스크립트처럼 interface를 쓰지 않고 사용하려하면 아래처럼 항상 정의해주어야한다.
const person: {name: string; age: number} = {
name: 'KDH',
age: 35
};
다른 언어에서 인터페이스를 다루어보았다면, 인터페이스를 상속받을 경우 해당 멤버들을 모두 구현해야한다는 것을 알고 있을 것이다. 타입스크립트에서는 인터페이스를 정의할 때, 구현하지 않아도 되는 속성을 지정할 수 있다. 아래와 같이 ?를 붙여주면 된다.
interface Person {
name: string;
age?: number; // 구현하지 않아도 됨
}
interface에서 멤버함수는 아래와 같이 쓸 수 있다. 크게 다르지 않다.
interface Hi {
name: string; // 변수
hello(): void; // 함수
// 구현은 hello: function() {} 혹은 hello:(): string => {} 등으로 가능
}
클래스와 인터페이스끼리의 상속은 C#이나 자바에서와 동일하게 사용하면 된다. class에서는 implements로 받고, 인터페이스끼리는 extends를 사용하면 된다.
class Hello implements IHello {
// 구현
}
interface Korean extends Person {
// 정의
}
인터페이스는 클래스가 아닌 함수에도 적용시킬 수 있다. 사실 색다른 개념이 아니라 맨 위의 용례에서 이어진다고 보면 된다.
interface Hello {
(name:string, age?: number): void;
}
let hello: Hello = function(name:String, age: number) {
// 구현
}
Indexable Type
마지막으로 잠시 특이한(?) 타입에 대해서 살펴볼 것이다. (아직 주니어이지만) 본인은 타입스크립트에서 처음 본 형태의 타입이었다.
optional한 타입으로, property가 지정한 타입으로 들어가면 된다. arr나 dict와 비슷한데 아래 실제 예를 보는 것이 이해가 빠르다.
interface Test {
[index: number]: string;
}
const test: Test = {};
test[0] = 'hi'; // 위 interface에서 지정한 것과 같이 index는 숫자, value는 string이다.
test[100] = 'hello';
interface Test2 {
name: string;
[index: string]: string;
}
const t2: Test = {
name: 'KDH'; // 위 interface에서 지정한 것과 같이 index는 string, value도 string이다.
}
즉 위와 같이 index틔 타입과 value에 넣을 타입을 지정해주고, 사용할 때에는 그에 맞게 사용하면 된다.
다음 글에서는 이어서 class에 대해서 다루도록 하겠다.
'Development > JavaScript' 카테고리의 다른 글
[Vue] Vuetify에 theme 색상 지정하기 (0) | 2020.12.26 |
---|---|
[Vue] Vuetify 설치하기(feat. typescript) (0) | 2020.12.26 |
[JS][TS] TypeScript의 간단한 설명과 타입 (0) | 2020.11.27 |
[JS] var, let, const (0) | 2020.11.06 |
[JS][WebPack] WebPack에서 환경변수 사용하기 (1) | 2020.10.24 |