minTech

[Typescript] νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³Έλ¬Έ

Typescript

[Typescript] νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€ μžλ°”μŠ€ν¬λ¦½νŠΈ

pushzzeong 2024. 3. 25. 14:32

πŸ•΅οΈ Javascript와 Typescript

λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” νƒ€μž… μ‹œμŠ€ν…œμ„ κ°–λŠ”λ‹€.

[νƒ€μž… μ‹œμŠ€ν…œ]
μ–Έμ–΄μ˜ νƒ€μž…κ³Ό κ΄€λ ¨λœ 문법 μ²΄κ³„λ‘œμ¨, 값듀은 μ–΄λ–€ κΈ°μ€€μœΌλ‘œ λ¬Άμ–΄ νƒ€μž…μ„ κ·œμ •ν•  것인지 κ²°μ •ν•œλ‹€.
μ½”λ“œμ˜ νƒ€μž…μ„ μ–Έμ œ, μ–΄λ–»κ²Œ 검사할 것인지 κ²°μ •ν•œλ‹€.

 

이 νƒ€μž… μ‹œμŠ€ν…œμ—λŠ” λŒ€ν‘œμ μœΌλ‘œ 두 개의 μ‹œμŠ€ν…œμ΄ μ‘΄μž¬ν•œλ‹€.

 

1) 정적 νƒ€μž… μ‹œμŠ€ν…œ

  • 정적 νƒ€μž… μ‹œμŠ€ν…œμ€ μ—„κ²©ν•˜κ³  고정적인 μ‹œμŠ€ν…œμ΄λ‹€. 
  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ, λ³€μˆ˜μ— ν• λ‹Ήν•  κ°’μ˜ 데이터 νƒ€μž…μ„ 사전에 μ„ μ–Έν•΄μ•Όν•œλ‹€.
  • λ˜ν•œ κ·Έ 이후에 νƒ€μž…μ„ λ³€κ²½ν•  수 μ—†μœΌλ©°, λ³€μˆ˜μ— μ„ μ–Έν•œ νƒ€μž…μ— λ§žλŠ” κ°’λ§Œ ν• λ‹Ήν•  수 μžˆλ‹€.
  • 컴파일 μ‹œμ μ— νƒ€μž… 체크λ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • νƒ€μž…μ˜ 일관성을 κ°•μ œν•¨μœΌλ‘œμ¨ λ”μš± μ•ˆμ •μ μΈ μ½”λ“œμ˜ κ΅¬ν˜„κ³Ό λŸ°νƒ€μž„μ— λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό μ€„μ΄μ§€λ§Œ, λͺ¨λ“  λ³€μˆ˜μ— νƒ€μž…μ„ μ§€μ •ν•΄μ£Όμ–΄μ•Όν•˜λ―€λ‘œ 타이핑 양이 μ¦κ°€ν•œλ‹€.
int num = 1;

num = "str" // νƒ€μž… μ—λŸ¬ λ°œμƒ

 

2) 동적 νƒ€μž… μ‹œμŠ€ν…œ

  • 동적 νƒ€μž… μ‹œμŠ€ν…œμ€ 자유둭고, μœ μ—°ν•œ μ‹œμŠ€ν…œμ΄λ‹€.
  • μ½”λ“œ μ‹€ν–‰ ν›„, κ·Έλ•Œ κ·Έλ•Œ μœ λ™μ μœΌλ‘œ λ³€μˆ˜μ˜ νƒ€μž…μ„ κ²°μ •ν•œλ‹€.
  • ν•˜λ‚˜μ˜ λ³€μˆ˜μ— μ–΄λ– ν•œ 데이터 νƒ€μž…μ˜ 값이라도 자유둭게 할당이 κ°€λŠ₯ν•˜λ‹€. 
  • λŸ°νƒ€μž„ μ‹œμ μ— μ—λŸ¬λ₯Ό λ°œκ²¬ν•˜λ―€λ‘œ 미리 λŒ€μ²˜κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€. 
let num = 1;
num = "str" // μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

 

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 경우 동적 νƒ€μž… μ‹œμŠ€ν…œκ³Ό 동적 νƒ€μž… μ‹œμŠ€ν…œ 각각의 단점을 λ³΄μ™„ν•˜κ³ , μž₯점을 쏙 λ½‘μ•„μ˜¨

"점진적 νƒ€μž… μ‹œμŠ€ν…œ" 을 μ‚¬μš©ν•œλ‹€. 

 

 

[점진적 νƒ€μž… μ‹œμŠ€ν…œ]

  • λ³€μˆ˜μ˜ νƒ€μž…μ„ μ‹€ν–‰ 전에 κ²°μ •ν•˜κ³ , λŸ°νƒ€μž„ 이전에 νƒ€μž… 체크λ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • λ”°λΌμ„œ λŸ°νƒ€μž„ μ‹œμ μ— λ°œμƒν•  μ—λŸ¬λ₯Ό 쀄여쀀닀.
  • μžλ™ 좔둠이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λͺ¨λ“  λ³€μˆ˜μ— νƒ€μž…μ„ 일일이 μ§€μ •ν•  ν•„μš”κ°€ μ—†λ‹€.
🀷‍♂️ μžλ™μΆ”λ‘ ?
νƒ€μž…μ„ μ§€μ •ν•œ λ³€μˆ˜λ“€μ€ κ·Έ νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜κ³ , μ§€μ •ν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ“€μ€ μžλ™ 좔둠을 μ‹€ν–‰ν•œλ‹€.
  • λ”°λΌμ„œ κ°œλ°œμžκ°€ 타이핑 ν•΄μ•Όν•  μ½”λ“œμ˜ 양이 쀄어든닀.

 

πŸ’  νƒ€μž…μ‹œμŠ€ν…œμ˜ λ™μž‘ 원리

λŒ€λ‹€μˆ˜μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ‹€μŒκ³Ό 같이 λ™μž‘ν•œλ‹€.

 

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” μ‚¬λžŒμ΄ μ΄ν•΄ν•˜κΈ° 쉽도둝 μ„€κ³„λ˜μ–΄ 있으며, 1. 이λ₯Ό 톡해 μ›ν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό μž‘μ„±ν•œλ‹€. 

ν•˜μ§€λ§Œ 이 μžμ²΄λ‘œλŠ” μ‚¬λžŒ μΉœν™”μ μ΄κΈ° λ•Œλ¬Έμ— 컴퓨터가 μ΄ν•΄ν•˜μ§€ λͺ»ν•œλ‹€.

λ”°λΌμ„œ 컴퓨터가 μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ ν˜•νƒœλ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” 2. 컴파일 과정이 ν•„μš”ν•˜λ‹€. μ΄λ ‡κ²Œ 컴파일 과정을 거치면 3. ν”„λ‘œκ·Έλž¨μ΄ μ»΄ν“¨ν„°μ—μ„œ 싀행될 μˆ˜κ°€ μžˆλ‹€.

 

즉, 컴퓨터가 이해할 수 μžˆλ„λ‘ κΈ°μ‘΄ μ½”λ“œλ₯Ό 컴파일 ν•˜λŠ” 과정이 μ‘΄μž¬ν•΄μ•Όν•˜λŠ”λ° μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ”

컴파일 κ³Όμ •μ—μ„œ 차이가 μ‘΄μž¬ν•˜λ‹€.

 

1) μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 컴파일 κ³Όμ •

Javascript ➑️  AST(좔상 문법 트리) ➑️ λ°”μ΄νŠΈ μ½”λ“œ

 

 

2) νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 컴파일 κ³Όμ •

Javascript ➑️ AST(좔상 문법 트리) ➑️ νƒ€μž… 체크

➑️ λ§Œμ•½ μ‹€νŒ¨ μ‹œμ—λŠ” 컴파일이 μ’…λ£Œ
➑️ λ§Œμ•½ 성곡 μ‹œμ—λŠ” λ‹€μ‹œ Javascript둜 λ³€ν™˜ ➑️ AST ➑️ λ°”μ΄νŠΈ μ½”λ“œ ➑️ μ‹€ν–‰

 

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€λ¦½νŠΈμ™€ 달리 AST둜 λ³€ν™˜ ν›„, νƒ€μž… 체크λ₯Ό μ‹€ν–‰ν•˜κ³ , 컴파일 성곡 μ‹œ λ‹€μ‹œ Javascript 둜 λ³€ν™˜λœλ‹€.

이 λ•Œ, νƒ€μž… 체크λ₯Ό μ‹€ν–‰ν•˜κ³  λ‚œ λ’€ λ³€ν™˜λœ javascript 파일의 경우 νƒ€μž… κ΄€λ ¨ 문법듀이 λͺ¨λ‘ 제거된 μ•„μ£Ό μ•ˆμ „ν•œ μ½”λ“œμ΄λ‹€.

 

✏️AST(좔상 문법 트리)

μ½”λ“œμ˜ κ³΅λ°±μ΄λ‚˜ 주석 같이 싀행에 κ΄€λ ¨ μ—†λŠ” 것듀은 μ œκ±°ν•œ ν›„, 트리 ν˜•νƒœμ˜ 자료 ꡬ쑰에 μ½”λ“œλ₯Ό μͺΌκ°œμ„œ μ €μž₯ν•œ ν˜•νƒœ

 

'Typescript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Error] VScode λΉ¨κ°„ 쀄이 μ•ˆ 생길 λ•Œ  (0) 2024.03.21