class Person { // class 키워드 소문자로, 클래스 이름 대문자로
name;
constructor(name: string){
this.name = name;
}
}
const p1 = new Person(‘Mark’);
name: string = “Mark”; 처럼 초기화해주기public(외부 접근 가능)private: class 내에서만 접근 가능 -> 이름 맨앞에 _ 붙이는 전통class Person {
public constructor(public name: string, public age: number) {}
}
🌟 생성자의 매개변수에 접근 제어자를 포함하면 따로 person: string; this.name=name으로 선언 및 할당하는 코드 없이 자동 할당 가능
class Person{
public constructor(private _name: string, private age: number) {}
get name(){
return this._name;
}
set name(n: string){
this._name = n;
}
}
const p1: Person = new Person(“Mark”, 39);
console.log(p1.name); // getter 사용
p1.name = “Loopy”; // setter 사용
public readonly name: string = “Mark”;class Students {
[index: string]: string; // [index: string]: “male” | “female”;
}
const a = new Studnets();
a.mark = “male”;
a.jade = “male”;
class Person{
public static CITY = “Seoul”;
public static hello(){ console.log(‘hi’); }
}
// 클래스명에 바로 붙여 사용 (object 이름 뒤에도 사용 가능)
Person.CITY;
Person.hello();
⭐ 다른 object에서 그 값이 변경되면 해당 클래스 전부에 영향을 주게 됨
class ClassName {
private static instance: ClassName | nul = nulll;
public static getInstance(): ClassName{
if(ClassName.instance === null) {
ClassName.instance = new ClassName();
}
return ClassName.instace;
}
private constructor() {} // class 밖에서 new를 사용할 수 없음
}
const a = ClassName.getInstace();
const b = ClassName.getInstace();
// a와 b는 같다
class Parent{
constructor(protected _name: string, private _age: number){}
public print():void {
console.log(`이름 ${this._name}, 나이 ${this._age}`);
}
}
const p = new Parent(“Mark”, 39);
class Child extends Parent{
public _name = “Mark Jr.”; // 이제 외부에서 _name 접근 가능 (override)
constructor(age: number){
super(_name, age);
// 자식의 생성자에서는 꼭 super로 부모 생성자 맨 먼저 호출해야 함
}
}
const c = new Child(5);
abstract class AbstractPerson{ // 해당 class는 new 키워드 사용 불가능
protected _name: string = ‘Mark’;
abstract setName(name: string): void; // 구현부X
}
class Person extends AbstractPerson{
setName(name: string): void{
this._name = name;
}
}
const p = new Person();
p.setName();