TypeScript-Getter & Setter/readonly/static

hannah·2023년 9월 26일
0

JavaScript

목록 보기
101/121

1. Getter & Setter

  • 비공개로 설정하려는 속성은 private로 설정하고, 속성값을 읽고 수정하는 getter/setter 함수를 사용한다.
  • 속성에 직접 접근해 수정하면 데이터 무결성이 깨질 수 있다.(캡슐화 권장)
  • 각 객체의 멤버에 접근하는 방법을 세밀하게 제어할 수 있다.
class Person {
  private _name: string;

  get name() {
    return this._name;
  }
  set name(name: string) {
    if (name.length > 10) {
      throw new Error("name too long");
    }
    this._name = name;
  }
}

let person = new Person();

console.log(person.name); // undefined
person.name = "june";
console.log(person.name); // june
person.name = "junejunejunejunejune"; // throw Error

2. readonly

  • 읽기만 가능한 속성을 선언하기 위해 사용한다.
  • 속성을 읽기 전용으로 설정해 변경할 수 없게 만든다.
  • 선언될 때나 생성자에서 값을 설정하면 이후 수정할 수 없다.
class Person {
  readonly age: number = 20; // 선언 초기화
  constructor(age: number) {
    this.age = age;
  }
}

let person = new Person(10);

person.age = 30; // Error: Cannot assign to 'age' because it is a read-only property.

3. static

  • 전역 멤버를 선언할 때 사용한다.
    전역멤버: 객체마다 할당되지 않고 클래스의 모든 객체가 공유하는 멤버
  • 범용적으로 사용되는 값에 설정한다.
  • "클래스명."을 앞에 붙여 static 멤버에 접근할 수 있다.
  • ES6에서는 메소드 전용 속성에는 선언이 안되었으나, TypeScript에서는 사용할 수 있다.
class Grid {
  static origin = { x: 0, y: 0 };
  calculateDistanceFromOrigin(point: { x: number; y: number }) {
    let xDist = point.x - Grid.origin.x;
    let yDist = point.y - Grid.origin.y;
    return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
  }
  constructor(public scale: number) {}
}

let grid1 = new Grid(1.0); // 1x scale
let grid2 = new Grid(5.0); // 5x scale

console.log(grid1.calculateDistanceFromOrigin({ x: 10, y: 10 }));
console.log(grid2.calculateDistanceFromOrigin({ x: 10, y: 10 }));

0개의 댓글