[TIL] TS의 클래스

vanLan·2024년 8월 27일
0

Typescript

목록 보기
2/2

TS에서의 클래스

TS에서의 Class는 JS에서의 Class와 별반 다르지 않다.
다만, 생성자 메서드에서 사용될 클래스의 프로퍼티들을 미리 정의해주어야 한다.


class Person {
  name: string;
  
  constructor(name: string) {
    this.name = name;
  }
  
  sum(a: number, b: number): number {
    return a + b;
  }
}

접근 제어자

  • public

    • 클래스 안에 선언된 프로퍼티와 메서드를 어디서든 접근 가능함.

    • 별도로 접근 제어자를 선언하지 않으면 기본값.

      
      class WaterPurifier {
        public waterAmount: number;
        
        constructor(waterAmount: number) {
          this.waterAmount = waterAmount;
        }
        
        public wash() {
          if(this.waterAmount > 0) {
            console.log('정수기 동작 성공');
        }
      }
      
      let purifier = new WaterPurifier(50);
      console.log(purifier.waterAmount);  // 50
      purifier.wash();  // 정수기 동작 성공
  • private

    • 클래스 코드 외부에서 클래스의 프로퍼티와 메서드를 접근할 수 없음.

    • 해당 프로퍼티에 접근 또는 수정이 필요한 경우 getter, setter 메서드를 작성해서 사용.

      
      class Person {
        private _name: string;
        
        constructor(name: string) {
          this._name = name;
        }
        
        // Getter 메서드
        get name(): string {
          return this._name;
        }
        
        // Setter 메서드
        set name(newName: string) {
          if(newName.length > 0) this._name = newName;
          else console.log('이름이 잘못 되었습니다.')
        }
      }
      
      const person = new Person('Vanlan');
      
      console.log(person.name);  // 'Vanlan'
      
      person.name = 'Kim';
      console.log(person.name);  // 'Kim'
      
      console.log(person._name);  // 에러
  • protected

    • private과 비슷하지만 다르다.

    • 클래스 코드 외부에서 사용할 수 없다는건 동일 하나, 상속받은 클래스에서는 사용할 수 있다.

      
      class Person {
        protected name: string;
        protected skill: string;
        
        constructor(name: string, skill: string) {
          this.name = name;
          this.skill = skill;
        }
        
        protected sayHi(): void {
          console.log('hi');
        }
      }
      
      class Developer extends Person {
        constructor(name: string, skill: string) {
          super(name, skill);
          this.sayHi();
        }
        
        coding(): void {
          console.log(`fun doing ${this.skill} by ${this.name}`);
        }
      }
  • 접근 제어자 사용시 주의점

    • 접근 범위에 따라 실행까지 막아 주지 않음.
profile
프론트엔드 개발자를 꿈꾸는 이

0개의 댓글