[TypeScript] Object, Interface, Class
2019. 9. 14. 20:01ㆍIT/Interest
Object
// const는 상수를 지정할 때 사용하지만 Object의 값은 수정할 수 있다.
const student = {
id : "123456",
name : "Kent"
};
// 아래 두 방법으로 Object의 값에 접근할 수 있다.
student.id = "654321";
student["name"] = "Kevin"
console.log(student); // 출력 : { id: '654321', name: 'Kevin' }
console.log(student["id"]); // 출력 : 654321
console.log(student.name); // 출력 : Kevin
Interface
객체(Object)의 구조를 나타내는 경우
interface Car {
door : number;
weight : number;
isOpened? : boolean;
// function
move() : void;
};
// Car 형태의 Object
const Boxter718:Car = {
door : 2,
weight : 1685,
isOpened : false,
move() => {console.log("move")}
};
// 함수에 인자로 Object를 전달하는 경우
function upgradeCar(car : Car, costs? : number):void {
// code
console.log(`Car's weight is ${car.weight}KG`);
}
upgradeCar(Boxter718); // 출력 : Car's weight is 1685KG
upgradeCar("Boxter911", 10000); // Car 형태의 인자를 전달하지 않아 오류가 발생한다.
Boxter718.move(); // 출력 : move
Boxter718.go(); // interface에 없는 함수 go를 실행하였기에 오류가 발생한다.
함수의 구조를 나타내는 경우
interface numOperation {
(num : number, num2 : number):number;
};
const sum:numOperation = (num, num2) => {
return num + num2;
}
// 위 sum 함수는 numOperation을 implement 하였기 때문에 아래와 같은 형태를 갖는다.
const sum(num : number, num2 : number):number{
return num + num2
}
// 아래 함수는 numOperation을 implement 하였지만, 반환 형태에 맞지않아 에러가 발생한다.
const multiply(num : number, num2 : number):string{
return num * num2;
}
Class
Class는 변수와 함수가 결합 된 객체이고, 생성자(constructor)와 함수의 내용은 비워둘 수 없다.
class House {
room : number;
toilet : number;
name? : string;
// 생성자
constructor(room : number, toilet : number, name? : string) {
this.room = room;
this.toilet = toilet;
// Optional Argument에 대한 처리
if (name === undefined) {
console.log("No Name");
}
}
visit():void{
console.log("Welcome to House");
}
quit(): void; // 함수의 내용이 비어있어 오류가 발생한다.
}
var house = new House(3,1);
house.visit();
상속
- 상속받는 클래스의 이름 뒤에 extends [부모 클래스] 이 들어간다.
- 부모 객체의 생성자를 호출하기 위해서는 super()를 사용한다.
// 음료 크기
enum drinkSize{
Tall,
Grande,
Venti
};
// 음료 타입
enum drinkType{
Cold,
Hot
};
// 음료에 대한 기본적인 정보를 담은 객체
class Drink{
size : drinkSize;
type : drinkType;
own_cup : boolean;
takeout : boolean;
constructor(size:drinkSize, type:drinkType, own_cup:boolean, takeout:boolean){
this.size = size;
this.type = type;
this.own_cup = own_cup;
this.takeout = takeout;
}
}
// Drink를 상속받는 Coffee
class Coffee extends Drink{
constructor(size:drinkSize, type:drinkType, own_cup:boolean, takeout:boolean){
// 부모 객체 생성자 호출
super(size, type, own_cup, takeout);
}
}
Union Type
|
를 이용하여 arg의 타입이 number 혹은 Person이 될 수 있다.
override 기능을 지원하지 않아 이렇게 사용할 수 있다.
class Person {
age: number;
constructor(arg: number | Person) {
if (typeof arg === 'number') {
this.age = arg;
} else if (arg instanceof Person) {
this.age = arg.age;
}
}
}
'IT > Interest' 카테고리의 다른 글
[Notion] 커스텀 도메인 이미지 오류 수정 (4) | 2020.09.06 |
---|---|
[iOS 단축어] 다회용 렌즈 사용 기록 (0) | 2019.12.19 |
[TypeScript] 객체지향 스타벅스 (0) | 2019.09.17 |
[TypeScript] 타입스크립트 시작하기 (2) | 2019.09.01 |