DH의 개발 공부로그
[TypeScript] 타입스크립트 클래스 - Classes 본문
728x90
클래스
타입스크립트는 자바스크립트 기반의 언어이기 때문에 자바스크립트에서와 마찬가지로 class
를 선언하고 사용이 가능합니다.
class PlayerInfo {
}
접근제한자
타입 스크립트에서는 자바와 같이 클래스 기반 객체 지향 언어가 지원하는
접근 제한자 public, pivate, protected를 지원하며 의미 또한 동일합니다.
접근 구분 | private | protected | publick |
선언한 클래스 내 | ⭕ | ⭕ | ⭕ |
상속받은 클래스 내 | ❌ | ⭕ | ⭕ |
인스턴스 | ❌ | ❌ | ⭕ |
class PlayerInfo {
constructor(
private firstName: string,
private lastName: string,
public nickName: string
) { }
// 메서드도 보호 가능
private getFullName() {
return this.firstName + this.lastName
}
}
// js로 변환 시 코드
class PlayerInfo {
constructor(firstName, lastName, nickName) {
this.firstName = firstName;
this.lastName = lastName;
this.nickName = nickName;
}
getFullName() {
return this.firstName + this.lastName
}
}
// 인스턴스
const jack = new PlayerInfo('jack', 'miled', '짹')
console.log(jack.nickName)
추상 클래스 (Abstract Class)
추상 클래스는 오직 다른 클래스가 상속받을 수 있는 클래스입니다.
그리고 추상 클래스는 직접 새로운 인스턴스를 만들 수는 없다.
abstract class User {
constructor(
private firstName: string,
private lastName: string,
protected nickName: string
) { }
// 메서드
getFullName1() {
return this.firstName + this.lastName
}
추상 메서드
구현이 되어있지 않은 (코드가 없는) 메서드로, 오로지 call signature만을 가집니다.
따라서 추상클래스를 상속받은 곳에서 추상 메서드를 구현해 주어야합니다.
abstract class User {
constructor(
private firstName: string,
private lastName: string,
protected nickName: string
) { }
abstract getNickName(): void // 추상 메서드
}
class UserInfo extends User {
// 추상 클래스를 상속받은 곳에서 추상 메서드 구현
getNickName() {
console.log(this.nickName)
}
}
readonly 사용하기
class에서 속성에 readonly를 사용이 가능합니다.
값을 보여주고, 불러올수는 있지만 수정은 불가능하게 하고 싶을 때 사용을 하면 됩니다.
class ReadWord {
constructor(
// 값을 보여주고, 불러올수는 있지만 수정은 불가능하게 하고 싶을 때
public readonly term: string,
public readonly def: string
) { }
}
타입으로 사용하기
타입스크립트의 클래스는 타입으로도 사용이 가능합니다.
type Words = {
[key : string] : string
// [key : string] -> 객체의 property에 대해 모르지만 타입만을 알 때 사용
}
class Dict {
private words : Words
constructor() {
this.words = {}
}
add(word : Word) { // word는 Word 클래스의 인스턴스 타입.
if (this.words[word.term] === undefined) {
console.log(`add ${word.term}`)
this.words[word.term] = word.def
}
}
}
class Word {
constructor(
public term : string,
public def : string
) {}
}
참고
728x90
'TypeScript' 카테고리의 다른 글
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #1 (0) | 2023.02.22 |
---|---|
[TypeScript] 타입스크립트 인터페이스 - Interface (0) | 2023.02.10 |
[TypeScript] 타입스크립트 Call Signatures와 오버로딩 알아보기! (0) | 2023.02.08 |
[TypeScript] 타입스크립트 다형성(Polymorphism) - 제네릭(Generic) (0) | 2023.02.07 |
[TypeScript] 타입스크립트 Tuple, Undefined, any, unknown, void, never (2) | 2023.02.06 |
Comments