readonly : 초기화 되는 영역에서만 할당할 수 있음(수정 방지)
class Person {
public readonly name: string = "Anna";
public constructor(private _name: string, private age: number) {}
}
const p1: Person = new Person("Mark", 39);
console.log(p1.name); // undefined
p1.name = "Anna";
// 읽기 전용 속성이므로 'name'에 할당할 수 없습니다.ts(2540)
console.log(p1.name); // undefined
class Person {
public readonly name: string = "Anna";
private readonly country: string = "Korea";
public constructor(private _name: string, private age: number) {}
hello() {
this.country = "Canada";
// 읽기 전용 속성이므로 'country'에 할당할 수 없습니다.ts(2540)
}
}
class Person {
public readonly name: string = "Anna";
private readonly country: string;
public constructor(private _name: string, private age: number) {
this.country = "Korea";
}
hello() {
this.country = "Canada";
// 읽기 전용 속성이므로 'country'에 할당할 수 없습니다.ts(2540)
}
}
// class => obejct
// {Anna: "female", Jane: "female"}
// {Jason: "male", Alex: "male", Choi: "female"}
// 클래스 동적 처리
class Students {
// [index: string]: string;
[index: string]: "male" | "female"; // 정확한 값 할당
}
const a = new Students();
a.Anna = "female";
a.Jane = "female";
console.log(a); // Students { Anna: 'female', Jane: 'female' }
const b = new Students();
b.Jason = "male";
b.Alex = "male";
b.Choi = "female";
console.log(b); // Students { Jason: 'male', Alex: 'male', Choi: 'female' }
class Students {
// [index: string]: string;
[index: string]: "male" | "female"; // 정확한 값 할당
Anna: "female" = 'female';
Anna = 'female';
// 'Anna' 형식의 'string' 속성을 'string' 인덱스 유형 '"female" | "male"'에 할당할 수 없습니다.ts(2411)
}
class Person {
public hello() {
console.log('안녕하세요');
}
}
const p1 = new Person();
p1.hello();
Person.hello();
// 'typeof Person' 형식에 'hello' 속성이 없습니다.ts(2339)
class Person {
public static hello() {
console.log('안녕하세요');
}
}
const p1 = new Person();
p1.hello();
// 'hello' 속성이 'Person' 형식에 없습니다. 대신 정적 멤버 'Person.hello'에 액세스하려고 하셨습니까?ts(2576)
Person.hello();
class Person {
private static CITY = 'Seoul';
public static hello() {
console.log('안녕하세요', Person.CITY);
}
}
const p1 = new Person();
// p1.hello();
Person.hello();
class Person {
private static CITY = 'Seoul';
public hello() {
console.log('안녕하세요', Person.CITY);
}
public change() {
Person.CITY = "LA";
}
}
const p1 = new Person();
p1.hello();
const p2 = new Person();
p2.hello();
p1.change();
p2.hello();
class ClassName {
private static instance: ClassName | null = null;
public static getInstance(): ClassName {
// ClassName 으로 만든 object 가 있으면 return
// ClassName 으로 만든 object 가 없으면 만들어서 return
if(ClassName.instance === null) {
ClassName.instance = new ClassName();
}
return ClassName.instance;
}
private constructor() {}
}
const a = ClassName.getInstance();
const b = ClassName.getInstance();
console.log(a === b); // true
class Parent {
constructor(protected _name: string, private _age: number) {}
public print(): void {
console.log(`이름은 ${this._name}이고, 나이는 ${this._age}입니다.`);
}
}
const p = new Parent("Mark", 39);
p.print(); // 이름은 Mark이고, 나이는 39입니다.
class Parent {
constructor(protected _name: string, private _age: number) {}
public print(): void {
console.log(`이름은 ${this._name}이고, 나이는 ${this._age}입니다.`);
}
protected printName(): void {
console.log(this._name, this._age);
}
}
// const p = new Parent("Mark", 39);
// p.print(); // 이름은 Mark이고, 나이는 39입니다.
class Child extends Parent {
public gender = "male";
constructor(age: number) {
super("Jane", age);
this.printName();
}
}
const c = new Child(1);
c.print();
abstract class AbstractPerson {
protected _name: string = "Mark";
abstract setName(name: string): void;
}
// new AbstractPerson(); // Error!
class Person extends AbstractPerson {
setName(name: string): void {
this._name = name;
}
}
const p = new Person();
// p.setName(); // Error!