const p1 = new Person("koo", 39); console.log(p1);
Getter & Setters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
class Person { public constructor(private _name: string, public age: number) {}
get name() { return this._name + "Jayoun"; }
set name(n: string) { this._name = n; } }
const p1 = new Person("koo", 39); console.log(p1.name); // get 을하는 함수를 getter p1.name = "Woongjae"; // set 을하는 함수를 setter console.log(p1.name); // get 을하는 함수를 getter
getter 만 만들고 setter는 만들지 않는 방식으로 읽기만 가능한 프로퍼티를 만들 수 있다.
readonly properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class Person { public readonly name: string = "Mark"; private readonly country: string = "Korea";
public constructor(private _name: string, public age: number) { this.country = "korea"; }
hello() { // this.country = 'China'; } }
const p1 = new Person("koo", 39); console.log(p1.name); // get 을하는 함수를 getter // p1.name = "Woongjae"; // readonly 이기 대문에 할당할 수 없다. console.log(p1.name); // get 을하는 함수를 getter
readonly 를 사용하여 get 만 할 수 있는 프로퍼티를 만들 수 있다. 이때 할당은 처음 프로퍼티를 생성하는 부분과 생성자에서만 할 수 있다.
// 매개체로 이용해서 객체를 꺼내옴. public static getInstance(): ClassName { // ClassName 으로 부터 만든 Object가 있으면 그걸 리턴 // 없으면, 만들어서 리턴 if (ClassName.instance === null) { ClassName.instance = new ClassName(); }
return ClassName.instance; }
// new 를 직접 호출 할 수 없게 함. // 다른 오브젝트 생성 금지 private constructor() {} }
// 만들어진 단일 오브젝트를 공유하는 개념 const a = ClassName.getInstance(); const b = ClassName.getInstance();
console.log(a === b);
생성자 함수를 private 접근 제어자를 사용해서 밖에서 호출하지 못하도록함. getInstance() 같은 함수를 사용해서 인스턴스가 있다면 반환하고 인스턴스가 없다면 새롭게 생성한후 할당, 프로퍼티로 있는 인스턴스를 넘겨준다.
이렇게 함으로서 클래스로쿠터 단 하나의 오브젝트만 생성해서 사용하는 패턴을 만들 수 있다.
// const p = new Parent("Mark", 39); // p.print();
// const c = new Child("son", 39); const c = new Child(5); c.print();
부모 클래스에서 protected 로 선언한 함수 또는 프로퍼티는 클래스 외에서 접근은 불가능하지만, 상속받은 자식 클래스에서 접근은 가능하다. 자식 클래스에서 기본 생성자가 아니라 따로 만들었다면, super()를 사용하여 부모 클래스이 생성자를 호출해 주어야 한다. 그렇게 해야지 부모 클래스의 값이 할당 되고 this키워드를 사용하여 호출, 사용할 수 있게 된다.
abstract
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// new 불가 , 상속후 완전하게 만든다음에 사용 가능. abstract class AbstractPerson { protected _name: string = "Mark";