[하루만에 정복해보는 TS] TS와 Class

2023. 6. 29. 18:48Trip to TypeScript

 TS는 JS Class를 객체 지향형 프로그램 언어처럼 만들어준다. 기존 JS에서는 쓸 수 없었던 접근 제한자 private, public, protected 등을 사용할 수 있게 해준다. 몰론 위 접근 제한자는 실제 js 코드에서는 사라지지만 말이다.

public은 기본값으로 제한이 없으며 private 자기 자신의 클래스 안에서만 사용 가능하다. 마지막으로 protected는 자기 자신 클래스와 상속된 클래스까지 접근이 가능하다.

 

class User {
	constructor(
		private firstName:string,
		private lastName:string,
		public nickname: string
	)
}

 

다음으로 abstract, 즉 추상 클래스에 대해 알아야한다. 추상이라는 말은 언제 어디서 만나도 사람을 힘들게 한다. 하지만, 여기서 만큼은 간단한다. 추상 클래스는 다른 클래스가 상속받을 수 있는, 그냥 사용할 수있는 클래스이다. 다만, 사용만 가능할 뿐 직접 인스턴스를 만들지는 못한다.

 

abstrast class User {
	constructor(
		private firstName:string,
		private lastName:string,
		public nickname: string
	) {}
}

class Player extends User {
}

const nico = new Player("nico", "las", "니꼬")

User 클래스를 활용해서 인스턴스를 만드는 것은 불가능하다. 그리고 abstract는 메소드에도 붙을 수 있는데 call signature만을 써주고 내용은 상속받는, 이 클래스를 사용하는 하위 클래스에서 정의해주어야한다.

 

abstrast class User {
	constructor(
		private firstName:string,
		private lastName:string,
		public nickname: string
	) {}
    abstract getNickName(): void
    
    getFullName(){
 		return `${this.firstName} ${this.lastName}`
    }
}

class Player extends User {
}

const nico = new Player("nico", "las", "니꼬")

이렇게 예시가 있다면 하위 클래스이자 상속받는 클래스 Player는 반드시 추상 메서드 getNickName을 구현해야한다.

abstrast class User {
	constructor(
		private firstName:string,
		private lastName:string,
		public nickname: string
	) {}
    abstract getNickName(): void
    
    getFullName(){
 		return `${this.firstName} ${this.lastName}`
    }
}

class Player extends User {
	getNickName() {
		console.log(this.nickname)
    }
}

const nico = new Player("nico", "las", "니꼬")

nico.getFullName()