추상 클래스

타입스크립트는 다른 언어처럼 abstract 키워드를 사용해 추상 클래스를 만들 수 있다. 추상 클래스는 다음처럼 abstract 키워드를 class 키워드 앞에 붙여서 만든다. 추상 클래스는 자신의 속성이나 메서드 앞에 abstract를 붙여 나를 상속하는 다른 클래스에서 이 속성이나 메서드를 구현하게 한다.


abstract class 클래스 이름 {
 abstract 속성이름: 속성 타입
 abstract 메서드이름() {}
}


// 추상 클래스 예

abstract class AbstractPesron5 {
 abstract name: string
 constructor(public age?: number){}
}


name 앞에 abstract 가 붙었으므로 new연산자를 적용해 객체를 만들 수 없다.

클래스의 상속

객체지향 언어는 부모 클래스를 상속받는 상속 클래스를 만들 수 있는데, 타입스크립트는 다음처럼 extends키워드를 사용해 상속 클래스를 만듭니다.


class 상속클래스 extends 부모클래스 {...}

다음 person5 클래느는 AbstractPerson5 추상 클래스를 상속해 AbstractPerson5가 구현한 age를 얻고 AbstractPerson5를 상속받는 클래스가 구현해야할 name 속성을 구현한다. (참고: 타입스크립트에서는 부모 클래스의 생성자를 super 키워드로 호출할 수 있음)


class Person5 extends AbstractPerson5{
 constructor(public name: string, age?: number){
 super(age)
 }
}

let jack5 : Person5 = new Person5('yerin', 27)
console.log(jack5) // Person5 { name: 'yerin', age: 27}

static 속성

다른 객체지향 언어처럼 타입스크립트 클래스는 정적인 속성을 가질 수 있다. 클래스의 정적 속성은 다음과 같은 형태로 선언함.


class 클래스이름{
 statric 정적속성이름: 속성타입
}

예시


class A{
 statric initValue  = 1
}

let initVal = A.initValue //1

03-4 객체의 비구조화 할당문

name과 age라는 단어가 각기 다른 의미로 사용되므로 personName, companyName처럼 둘을 구분하고 있다.


let personName = 'Jack'
let personAge = 32

let companyName = 'Apple
let companyAge = 43

구조화가 필요한 코드를 인터페이스나 클래스를 사용해 관련된 정보를 묶어 새로운 타입으로 표현한다. 이를 구조화 라고한다.

export interface IPerson { name: string age: number }

export interface ICompany { name: string age: number }

코드를 이처럼 구조화하면 비슷한 유형의 변수를 쉽게 만들수 있어서 코드의 기능 확장이 수월해집니다.


import {IPerson, ICompany} from './IPerson_ICompany'

let jack: IPerson = {name: 'Jack', age:32},
    jane: IPerson = {name:'jane', age: 32}

let apple: ICompany = { name:'apple', age:43},
    ms: ICompany = {name: 'microsoft', age:44}


비구조화란?

구조화된 데이터는 어떤 시점에서 데이터의 일부만 사용할 떄가 있음.

let name = jack.name, age = jack.age

이 시점부터는 jack 변수는 사용하지않고 name과 age변수만 사용함. 이처럼 구조화된 데이터를 분해하는 것을 비구조화 라고함.

비구조화 할당

비구조화 할당은 EXNext 자바스크립트의 구문으로 타입스크립으에서도 사용할수 있다. 비구조화 할당은 객체와 더불어 배열과 튜플에도 적용 가능하다. 비구조화 할당을 객체에 적용하려면 얻고 싶은 속성을 중괄호로 묶는다.

let {name, age} = jack

비구조화가 아니라 비구조화 할당인 이유는 name과 age 변수가 새롭게 만들어지고 name변수는 jack.name의 값, age변수는 jack.age값을 초깃값으로 할당받기 때문임.