TypeScript: Class,Getter/Setter,Extends

양성진·2022년 9월 5일
0

TypeScript

목록 보기
2/9

Class

object를 만드는 설계도이다.
클래스 이전에 object를 만드는 기본적인 방법은 function이다. 그리고
TypeScript 에서는 클래스도 사용자가 만드는 타입중의 하나이고, JS보다 강력합니다
class는 사용자가 만드는 type의 하나를 말한다.

어떻게 만들까?

필드

 -일종의 속성
 -public으로 사용가능합니다.
 
class Person{
   
    name:string;
    age: number;
    readonly location: string = 'Korea';

}

생성자

초기화 담당
  constructor(name:string, age:number){
      this.name = name
      this.age = age
  }

메서드

객체(클래스)에서는 행동을 뜻한다.

information():string{
    return `${this.name}의 나이는 ${this.age}입니다.`
}
}

인스턴스

클래스에서 파생된 고유한것
실제로 생성된 후 메모리에 올라간다


const p1 = new Person('Yang',30) // instance가 된다.
const p2 = new Person('Jang',40) // instance가 된다.


console.log(p1.information())
console.log(p2.information())

getter / setter

  • 객체지향외에도 사용할수 있다.
  • 필드에 접근할 권한을 가진 제어자.
  • getter 0/ setter x => 속성은 자동으로 읽기 전용
  • setter 매개변수의 타입 X / getter의 반환 타입에서 추론
  • 비공개로 설정할 필요가 있는 속성을 private로 설정한 후, 이 속성에 접근하여 값을 읽거나,
  • 쓰기 위한 Getter, Setter 함수를 사용하여 속성을 정의할 수 있습니다.
  • private 속성은 .연산자로 접근할 수 없다.

class Person{
    name:string;
    private _age:number;
constructor(name:string, age:number){
    this.name = name
    this._age = age
}

get age(){
    if(this._age === 0){
        return '설정되지 않습니다.'
    }
    return `나이는 ` + this._age + `세로 추정 됩니다.`
}

set age(age){
    if(typeof age === 'number'){
    this._age = age
    }

    this._age = 0;
}

}

const p = new Person('Yang',60)

console.log(p.age)

extends

  • 상속
  • 확장
  • 부모 클래스에게 상속의 개념보단 기본적인 클래스에서 파생이 된다는 개념으로도 볼수 있다.

super

  • 기본 클래스 호출시 사용
  • 생성자에서 this 사용전에 호출 되어야 한다.
class Aninmal {
    name:string;


    constructor(name:string){
        this.name = name
    }

    sayName(){
        return `${this.name}입니다`
    }
}


class Person extends Aninmal{
    constructor(name:string){
        super(name)
    }
    sayName(){
        return `동물의 이름은 ${super.sayName()} 사람의 이름은 ${this.name}입니다`
    }
}
// 확장된 상속의 구조

const p1 = new Person('Yang')
console.log(p1.sayName())


// class base{
//     result(){
//         return 'Base'
//     }
// }

// class Extend extends base {
//     result(){
//         return 'hard'
//     }
// }

// const de = new Extend();

// console.log(de.result())
profile
프론트엔드 개발자를 꿈꾸는 돼지

0개의 댓글