자바스크립트는 클래스에 비공개 속성을 만들 수 없습니다. 마찬가지로 타입스크립트에서도 public, protected, private 접근 제어자를 사용할 수 있으나 공개 규칙을 강제할 수 없습니다. 타입스크립트 접근 제어자들은 컴파일 이후 사라지는 키워드이며 컴파일 시점에서만 오류를 표현해줍니다. 런타임에는 아무런 효력이 없다는 뜻입니다.
정보를 감추기 위한 목적이라면 타입스크립트 접근 제어자 대신 클로저를 사용하는 것입니다.
declare function hash(text: string): number;
class PasswordChecker {
checkPassword: (password: string) => boolean;
constructor(passwordHash: number) {
this.checkPassword = (password: string) => {
return hash(password) === passwordHash;
}
}
}
const checker = new PasswordChecker(hash('ABBB'));
checker.checkPassword('ABBB');
|
위 예제와 같은 방법을 이요하면 몇 가지 주의사항이 있다고 합니다.
위 예제를 기준으로 'passwordHash' 값은 생성자 외부에서 접근할 수 없기 때문에, 해당 변수에 접근해야 하는 메서드의 경우 똑같이 생성자 내부에서 정의되어야 합니다.
그리고, 메서드 정의가 생성자 내부에 존재하게 되면, 인스턴스를 생성할 때마다 각 메서드의 복제본이 생성되기 때문에 메모리의 낭비가 발생할 우려가 있다고 합니다.
다음 선택지로, '#' 접두사를 붙혀서 타입 체크와 런타임 모두 비공개로 만들 수 있습니다.
declare function hash(text: string): number;
class PasswordChecker { #passwordHash: number;
constructor(passwordHash: number) {
this.passwordHash = passwordHash;
}
checkPassword(password: string){
return hash(password) === this.#passwordHash;
}
}
|
'IT' 카테고리의 다른 글
Effective Typescript - 2 - 타입스크립트 설정 이해하기 (0) | 2022.01.24 |
---|---|
Effective Typescript - 1 - 타입스크립트와 자바스크립트의 관계 이해하기 (0) | 2022.01.24 |
Effective Typescript - 54 - 객체를 순회하는 노하우 (1) | 2022.01.24 |
Effective Typescript - 53 - 타입스크립트 기능보다는 ECMAScript 기능을 사용하기 (0) | 2022.01.24 |
Effective Typescript - 52 - 테스팅 타입의 함정에 주의하기 (0) | 2022.01.24 |