관리 메뉴

흰둥씨의 개발장

[typescript] 클래스 본문

[오늘의 공부]/typescript

[typescript] 클래스

돈워리비해삐 2023. 6. 15. 23:52

접근제한자 (Access modifier)

- public
ㄴ자식클래스나 클래스 인스턴스에서 접근가능 
ㄴ아무것도 안적혀있으면 모두 public으로 간주됨 

-private
ㄴ본인 클래스 내부 에서만 접근가능 
ㄴ자식클래스 내부에서 사용할 수 없음
ㄴ변수앞에 #붙이면 private으로 처리됨 

-protected
ㄴ자식클래스에서 접근가능 
ㄴ클래스 인스턴스에서 접근 불가

class Car {
	protected cat:string = "lovely";

	private price : string = '1million';
	#path : string = '';  //#은 private과 동일한 표기 

	readonly middlename : string = "hyo";
	readonly lastname : string = "sun";

	name: string = "car";  //접근제한자 안쓰면 public임
	color: string;            // 클래스 작성시 멤버변수는 미리 선언해줘야함 

	//맴버변수를 위와 같이 미리 선언하지 않는 방법으로는 readonly나 접근제한자 이용하면됨 
	//constructor(public color: string){          접근제한자 public쓰기
	//constructor(readonly color: string){        readonly쓰기

	constructor(color: string){
		this.color = color;
	}
	start(){
		console.log("start");
		console.log(this.price);  //price는 private이기 때문에 Car클래스 내에서만 접근가능 
		console.log(this.#path);  //#path는 private이기 때문에 Car클래스 내에서만 접근가능 
	}
}

class bmw extends Car { 
	constructor(color:string){
		super(color);
	}
	showName(){
		console.log(this.name); //name이 public이기 때문에 자식클래스내에서 접근 가능함
		//console.log(this.price);  #path, price는 private이기 때문에 자식클래스에서 접근불가 
		//console.log(this.#path);   
		console.log(this.cat);  //cat은 protected여서 자식클래스에서는 접근 가능
	}
}

const Z4 = new bmw("black");
//console.log(Z4.cat);   cat은 protected여서 클래스인스턴스에서는 접근불가 
Z4.name = "z4 car";  //수정가능 
//Z4.middlename = "효"   middlename은 readonly여서 수정불가

 


속성

readonly - 읽기 전용 속성으로 자식클래스에서 수정 불가
ㄴ바꾸고 싶으면 constructor내부에 매개변수로 바꿀수 있도록 가능 

class CAR {
	readonly message : string = "what the hell";// message가 read-only속성을 가지고있지만,
    
    constructor(message: string){
    	this.message = message; //매개변수로 받아서 속성변경가능하게 처리 
    }
 }
 
 const SNS = new CAR("왓 더 헬"); 
 console.log(SNS.message);  //왓 더 헬

 


static - 클래스명으로만 접근가능 (자식인스턴스명이나 this등으로 접근안됨)

class CAR {
	static wheels : number = 4;  //static으로 선언된 정적변수는 
    
    start(){
    //console.log(this.wheels); this로 접근하면 에러남
    console.log(CAR.wheels);  // class명으로 접근해야함 
	}
 }
 
 const BMW = new CAR(); 
  //console.log(BMW.wheels);  에러남
 	console.log(CAR.wheels);  // class명으로 접근해야함

 


추상 class - 클래스 앞에 abstract 키워드로 생성가능 

 abstract class CAR {  //추상클래스
	name: string = "car";
    
    start(){
    console.log(this.name); 
	}
    abstract doingSth():void{};  //추상 메서드는 상속받은 클래스에서 반드시 정확히 구현해주어야 함 
 }
 
 //const BMW = new CAR(); 추상클래스는 new키워드를 통해 객체 생성 불가 

class Banz extends CAR { //추상클래스는 오로지 상속으로만 객체 생성 가능 
	
    //추상메서드는 상속받은쪽에서 구현안하면 에러남
	doingSth(){ //추상메서드 구현
    	alert("I'll...");
    };
    
}