class 클래스이름{
[private | protected | public] 속성 이름[?] : 속성 타입[...]
}
자바스크립트에서 클래스는 객체이다.
class Person1{
// 변수의 타입을 작성해준다.
name : string
age ?: number
}
// 클래스를 인스턴스화 시키는데 클래스 타입을 명시한다.
let kangmin : Person1 = new Person1();
kangmin.name = 'kangmin';
kangimin.age = 21;
console.log(kangmin); // Person1{name : "kangmin" , age : 21}
클래스를 사용하는 다른 언어와 마찬가지로 public, private, protect와 같은 접근제한자를 사용할 수 있다. 생략 시 public 이다.
class Person3{
name : string
age : 23
constructor(name : string, age ?: number){
this.name = name;
this.age = age;
}
}
let kangmin2 : Person3 = new Person3("kang", 23)
인터페이스 생성 뿐 아니라 구현도 할 수 있다.
class 클래스 이름 implements 인터페이스 이름{
...
}
인터페이스를 구현하는 구현 클래스는 반드시 인터페이스가 정의하고 있는 멤버 속성으로 포함해야 한다.
interface IPerson{
name : string
age ?: number
}
class Person implements IPerson{
name : string
age ?: number
}
// 혹은 아래와 같이 생성자로 넘겨주어도 된다.
class Person2 implements IPerson{
constructor(public name : string, public age ?: number){}
}
// 인스턴스화를 할때는 변수에 타입으로 인터페이스타입으로 넘겨준다.
let kangmin : IPerson = new Person2('kangmin', 23)
console.log(kangmin); // Person2{name : "kangmin", age : 23}
abstract class 클래스이름{
abstract 속성 이름 : 속성 타입
abstract 메서드 이름 ( ) { }
}
추상클래스는 new 연산자를 적용하여 객체를 만들 수 없다.
abstract class AbPerson{
abstract name : string
constructor(public age ?: number) { }
}
class 상속 클래스 extends 부모클래스 {...}
class Person extends AbPerson{
constructor(public name : string, age ?: number){
//부모생성자를 super로 가져 올 수 있다.
super(age)
}
}
let kangmin : Person = new Person('kangmin', 23)
console.log(kangmin); //Person{name : "kangmin", age : 23}