GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • 코드업파이썬
  • javascript
  • 영어
  • 백준파이썬
  • 영어독해
  • 파이썬
  • 독해
  • 코딩
  • 자바스크립트
  • 프로그래머스자바스크립트
  • 프론트엔드
  • 코테
  • 백준풀이
  • 백준
  • PYTHON
  • 코드업
  • 프로그래머스풀이
  • 프로그래밍언어
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

이펙티브 타입스크립트 스터디 - 7주차 발표 정리
프로그래밍언어/TypeScript

이펙티브 타입스크립트 스터디 - 7주차 발표 정리

2024. 6. 22. 14:01

이펙티브 타입스크립트 스터디 - 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
    '프로그래밍언어/TypeScript' 카테고리의 다른 글
    • 이펙티브 타입스크립트 스터디 - 6주차 발표 정리
    • 이펙티브 타입스크립트 스터디 - 5주차 발표 정리
    • 이펙티브 타입스크립트 스터디 - 4주차 발표 정리
    • 이펙티브 타입스크립트 스터디 - 3주차 발표 정리
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바