[34] TS - Class

반응형

접근제어자

기본적으로 자바스크립트는 언어에서 제공되지않았기에 네이밍앞에 _ 를 붙여서 암묵적으로 사용했다

타입스크립트 에서는 언어적으로 접근제어자를 제공하게되었는데

외부에서 접근할수있도록 키워드를 통해서 제어를 할수있다.

public private protected 가 있다 defualt 값은 public 이다.

클래스 내부에 모든곳에 생성자, 프로퍼티 , 메서드 등에 설정 가능하다.

public 은 외부에서 접근할수있는 제어자이다.

private 는 클래스 외부에서 접근 할수없다.

protexted 외부에서는 접근이 불가능하지만 상속관계에서는 접근가능하다.

getters & setters

어떤 객체의 프로퍼티를 접근해서 get 하는 것 과 프로퍼티의 재할당하는 set 하는 행위들을 함수로 표현하는것이다.

class Person {
  constructor(public name: string, public age: number) {}

}

// object 생성
const p1 = new Person("jaehyun", 29);

**console.log(p1.name); // get 을 하는 함수를 getter
p1.name = "jaehee"; // set 을 하는 함수를 setter**

이런것들을 따로 함수로 만들수가있다.

함수로만들고 내부프로퍼티를 private를 설정하게되면 동일하게 프로퍼티에 접근해서 get 과 set을 할수있지만 외부자가 객체 내부의 데이터에 접근하는것을 방지할수있다.

class Person {
  constructor(private _name: string, private age: number) {}

  get name() {
    console.log("get");
/
    return this._name;
  }

  set name(n: string) {
    console.log("set");
    this._name = n;
  }
}

// object 생성
const p1 = new Person("jaehyun", 29);

console.log(p1.name); // get 을 하는 함수를 getter
p1.name = "jaehee"; // set 을 하는 함수를 setter
console.log(p1.name);

readonly

프로퍼티에 readonly 를 붙이게되면 set은 할수없고 get만할수있게된다.

정확히는 선언되는 부분, 초기화되는 영역에서만 변경이 가능하다.

클래스 내부 에서도 public 이든 private 이든 변경이 불가능하다.

class Person {

**//선언 or 초기화 -----**
  **public readonly name: string = "jaehyun";
  private readonly city: string;

    constructor(private _name: string, private age: number) {
      this.city = 'seoul';
    }

// ---------**

    change() {
        this.city = 'busan';
// 에러 발생 
    }
  }
}

index signatures

프로퍼티가 고정된형태가 아닌 동적으로 들어오는 프로퍼티이름이 들어오는 경우에 사용된다.

// class => object

class Students {
//index signatures
  [index: string]: string;
}

const a = new Students();
a.mark = "male";
a.jade = "male";

console.log(a);

static properties & methods

class 를 new 를 통해 object를 만들어서 사용했다

object.프로퍼티 를 통해서 사용을했었는데 class.프로퍼티를 사용할수있도록 만들어볼수있다.

클래스를 통해 만든 object 들에서 공유하여 사용해야되는것이 있다면 static으로 만들어 사용한다.

싱글톤 패턴

어플리케이션이 실행되는 중간에 클래스로부터 하나의 오브젝트만 생성을 해서 사용하는것을 말한다.

class ClassName {
  private static instance: ClassName | null = null;
  public static getInstance() : ClassName {
    // ClassName 으로부터 만든 object 가 있으면 그것을 리턴
    // 없다면 , 만들어서 리턴
    if (ClassName.instance === null) {
      ClassName.instance = new ClassName();
    }

      return ClassName.instance;
  }
  private constructor() {}
}

// new 라는 키워드로 생성x
const a = ClassName.getInstance();
const b = ClassName.getInstance();
반응형

'활동 > 회고록' 카테고리의 다른 글

7주 회고  (0) 2022.12.26
6주 회고  (0) 2022.12.19
5주 회고  (1) 2022.12.12
4주회고  (1) 2022.12.05
3주 회고  (1) 2022.11.28