typescript 클래스
readonly : 접근만 가능. 즉, 수정이 불가능하다.
예시
class A{readonly name:string;}
이고 const B=new A();
라고 정해줄 때 B.name='def'
를 쓰면 name부분에 빨간색 물결줄이 생기면서 문제 창에 읽기 전용 속성이므로 ‘name’에 할당 할 수 없습니다. 라고 나온다
Accessor : get과 set을 이용해서 get으로 지정한 값을 가져오고 set으로 get으로 가져온 값을 사용한다. 대신 get와 set을 쓸 때 지정한 변수명을 쓸 수는 없다. 접근은 .속성이름 으로 접근한다
예시
class MyTypeClass { private name:string=""; get getname():string { return this.name;} set setname(newValue:string) {this.name=newValue;}}
const mytypeclass = new MyTypeClass();
mytypeclass.setname="green";
이며 console.log(mytypeclass)
를 출력해보면 name에 green 문자가 들어가 있는 것을 확인 할 수 있다. 이 때 mytypeclass.name
을 찾을수 없다고 나오는데 이유는 name에 private를 붙임으로써 class 내에서만 사용이 가능해서 밖에서 쓸 수 없다. 그래서 get(읽기 접근) 과 set(쓰기 접근) 을 쓴 것이다. 만약 set을 쓰지 않는다면 읽기 접근만 있는 readonly와 같아진다.
abstract class(추상 클래스) : 특정 클래스의 상속 대상이 되는 클래스이며 좀 더 상위 레벨에서 속성, 메서드의 모양을 정의한다. 간단하게 생각하면 전체는 아니지만 한 부분이라도 비여있게 표시는 가능하나. 상속해주는 곳에서 완전히 설정해줘야 작동하는 클래스. 즉, 추상클래스 자체로는 쓸 수 없다.
예시
abstract class 이름{ abstract 함수명():void}
-대부분 실행할 내용을 뺀 모양이다.
class 다른이름 extends 추상클래스이름{함수명():void {실행할 내용}}
와 같이 나머지를 채운 형태를 쓴다.
제너릭(generics) : 타입을 함수의 파라미터처럼 사용함
예시
function getText<T>(text:T):T{return text;}
라고 작성하고 getText<string>("hi");
이면 function getText<string>(text:string):string{return text;}
처럼 인식한다
사용하는 이유는 함수의 인자로 어떤 타입이 들어갔고 어떤 값이 반환되는지 알 수 없기 때문(any가 대표적인 예시)
클래스로도 붙일 수 있다
예시
class GenericMath<T>{ pi:T; sum:(x:T,y:T)=>T;}
일 때 const math= new GenericMath<number>();
와 같이 쓸 수 있다. 이 때 math의 class는 GenericMath<number>{pi:number; sum:(x:number,y:number)=>number;}
가 된다.