클래스에서 타입정의 방법은 함수 정의 방법과 비슷하며, 생성자 메서드에서 사용될 속성들을 미리 정의해주어야합니다.
class User {
// 사용될 name 속성의 타입을 정의
name: string;
// 파라미터 타입 정의
constructor(name: string) {
this.name = name;
}
// 파라미터 및 리턴 타입 정의
introduce(text: string): void {
return console.log(text);
}
}
클래스의 멤버 변수와 메서드에 대한 접근 권한을 제어하는 키워드입니다. 접근 제어자를 사용하여 클래스의 내부 구조를 캡슐화하고, 외부에서의 접근을 제한하거나 허용할 수 있습니다.
타입스크립트에서는 다음 **네 가지 접근 제어자(public, private, protedcted, readolny)**를 사용할 수 있습니다.
public
: 멤버 변수나 메서드를 클래스 내부에서만 접근할 수 있도록 합니다. 외부에서 접근 시 컴파일 오류가 발생합니다.private
: 멤버 변수나 메서드를 클래스 내부에서만 접근할 수 있도록 합니다. 외부에서 접근 시 `컴파일 오류가 발생합니다.protected
: 멤버 변수나 메서드를 클래스 내부와 해당 클래스를 상속한 하위 클래스에서만 접근할 수 있도록 합니다.readonly
: 멤버 변수를 읽기 전용으로 만듭니다. 즉, 초기화된 후에는 값을 변경할 수 없습니다.아래 코드에서 public
접근 제어자를 이용하여 은행 클래스를 구현하였습니다.
class에서 접근 제어자의 키워드를 붙이지 않으면 기본적으로 public
접근 제어자가 부여됩니다,
이 코드에서 발생할 수 있는 문제점은 money 속성을 외부에서 접근가능하도록 public
접근 제어자로 지정하였기 때문에 외부에서 money를 맘대로 조작할 수 있는 문제가 발생합니다.
class Bank {
public money: number;
constructor(money: number) {
this.money = money;
}
public withdraw(money: number) {
const currentMoney = this.money - money;
if (currentMoney > 0) {
console.log(`예금 인출이 성공적으로 이루어졌습니다. 현재 남은 예금은 ${currentMoney}원 입니다.`);
} else {
console.log(`예금 인출 잔액이 부족합니다. 현재 남은 예금은 ${currentMoney}원 입니다.`)
}
}
public inquiry() {
console.log(`현재 예금 잔액은 ${this.money}원 입니다.`)
}
}
const myBank = new Bank(1000);
myBank.withdraw(100);
myBank.withdraw(1000);
// 외부에서 money 조작 가능
myBank.money = 9999999;
// 현재 금액은 9999999원이 됨
myBank.inquiry();