이펙티브 타입스크립트 스터디 - 7주차 발표 정리
아이템 56. 정보를 감추는 목적으로 private 사용하지 않기
const diary = new Diary()
diary.secret
// ~~~~~~ Property 'secret' is private and only
// accessible within class 'Diary'
타입스크립트에는 public, protected, private 접근 제어자를 사용하여 접근을 제한할 수 있다.
하지만, 이러한 접근 제어자들은 타입스크립트 키워드이기 때문에 컴파일 이후에는 제거된다
자바스크립트에서는 접근 제어자가 없기때문이다.
자바스크립트 코드로 변환되면 일반적인 속성으로 취급되어 접근이 가능해진다.
onst diary = new Diary();
(diary as any).secret // 에러없음
심지어, 단언문을 사용하면 private 속성에 접근이 가능하다.
정보를 감추는 용도로 private를 사용하는 것은 옳지 않아보인다.
자바스크립트에서 정보를 숨기기 위해 가장 효과적인 방법은 클로저를 사용하는 것이다.
class PasswordChecker_ {
checkPassword: (password: string) => boolean
constructor(passwordHash: number) {
this.checkPassword = (password: string) => {
return hash(password) === passwordHash
}
}
}
const checker = new PasswordChecker(hash('s3cret'))
checker.checkPassword('s3cret') // Returns true
passwordHash 변수에 접근할 수 없음
주의.
- passwordHash에 접근해야 하는 메서드 역시 생성자 내부에 정의되어야 한다.
- 메서드 정의가 생성자 내부에 존재하게 되면, 인스턴스를 생성할 때마다 각 메서드의 복사본이 생성되어 메모리를 낭비하게 된다.
- 동일한 클래스로부터 생성된 인스턴스라고 하더라도 서로의 비공개 데이터에 접근하는 것이 불가능하다.
또다른 방안.
class PasswordChecker {
#passwordHash: number;
constructior(passwordHash: number){
this.#passwordHash = passwordHash;
}
.
.
.
이하 생략
}
접두사로 #을 붙여서 타입 체크와 런타임 모두에서 비공개로 만들 수 있다.
대신 이 기법은 클래스 메서드나 동일한 클래스의 개별 인스턴스끼리는 접근이 가능하다.
아이템 57. 소스맵을 사용하여 타입스크립트 디버깅하기
타입스크립트 코드를 실행한다는 것은, 엄밀히 말하자면 타입스크립트 컴파일러가 생성한 자바스크립트 코드를 실행한다는 것.
따라서, 디버깅은 전처리기, 컴파일러, 압축기를 거친 자바스크립트가 대상이 된다.
이러한 코드는 복잡하여 디버깅하기 매우 어려운데, 이를 해결할 수 있도록 나온 것이 '소스맵'이다.
소스맵은 변환된 코드의 위치와 심벌들을 원본 코드의 원래 위치와 심벌들로 매핑한다.
{
"compilerOptions": {
"sourceMap": true
}
}
tsconfig.json에서 위 설정을 하고 컴파일을 실행하면 소스맵이 생성된다.
타입스크립트 코드를 디버깅할때는 변환된 자바스크립트 코드로 디버깅을 하는 것이 아닌 소스맵을 사용하여 타입스크립트 소스로 매핑되도록하여 런타임에 디버깅하는 것이 이상적인 방법이다.
주의.
소스맵에 원본 코드가 그대로 포함되도록 설정되어 있을 수 있다.
공개해서는 안 될 내용이 들어 있을 수 있으니 이 부분은 공개되지 않도록 설정을 확인하자.
'프로그래밍언어 > TypeScript' 카테고리의 다른 글
이펙티브 타입스크립트 스터디 - 6주차 발표 정리 (1) | 2024.06.16 |
---|---|
이펙티브 타입스크립트 스터디 - 5주차 발표 정리 (1) | 2024.06.07 |
이펙티브 타입스크립트 스터디 - 4주차 발표 정리 (0) | 2024.06.01 |
이펙티브 타입스크립트 스터디 - 3주차 발표 정리 (0) | 2024.05.25 |
이펙티브 타입스크립트 스터디 - 1주차 발표 정리 (0) | 2024.05.11 |