λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ–Έμ–΄/Javascript

[JS] Dynamic typing (dynamic type vs static type)

by lee365 2021. 7. 10.
λ°˜μ‘ν˜•

πŸ’‘ 동적 νƒ€μž… μ–Έμ–΄ dynamic/weak type

  • μžλ°”μŠ€ν¬λ¦½νŠΈ, 파이썬, PHP λ“±
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•ŠλŠ”λ‹€. λ‹€λ§Œ var, let, constν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  뿐이닀.
  • 값을 ν• λ‹Ήν•˜λŠ” μ‹œμ μ— λ³€μˆ˜μ˜ νƒ€μž…μ΄ λ™μ μœΌλ‘œ κ²°μ •λ˜κ³  λ³€μˆ˜μ˜ νƒ€μž…μ„ μ–Έμ œλ“ μ§€ 자유둭게 λ³€κ²½ν•  수 μžˆλ‹€.
  • λ‹€μ‹œλ§ν•΄, 할당에 μ˜ν•΄ νƒ€μž…μ΄ κ²°μ •λœλ‹€. 그리고 μž¬ν• λ‹Ήμ— μ˜ν•΄ νƒ€μž…μ€ μ–Έμ œλ“ μ§€ λ™μ μœΌλ‘œ λ³€ν•  수 μžˆλ‹€.
    ➑ Dynamic typing 
var foo;
console.log(typeof foo); // undefined

foo = 3;
console.log(typeof foo); // number

foo = 'Hello world!';
console.log(typeof foo); // string

foo = true;
console.log(typeof foo); // boolean

foo = null;
console.log(typeof foo); // object

foo = {};
console.log(typeof foo); // object

foo = [];
console.log(typeof foo); // object

foo = functioin() {};
console.log(typeof foo); // function

 

πŸ™„ 동적 νƒ€μž… μ–Έμ–΄μ˜ ꡬ쑰적인 단점

  • λ³€μˆ˜ 값은 μ–Έμ œλ“ μ§€ 변경될 수 있기 λ•Œλ¬Έμ— λ³΅μž‘ν•œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λ³€ν™”ν•˜λŠ” λ³€μˆ˜ 값을 μΆ”μ ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€.
  • 값을 ν™•μΈν•˜κΈ° μ „μ—λŠ” νƒ€μž…μ„ ν™•μ‹ ν•  수 μ—†λ‹€
  • 개발자의 μ˜λ„μ™€λŠ” 상관없이 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ νƒ€μž…μ΄ μžλ™μœΌλ‘œ λ³€ν™˜λ˜κΈ°λ„ ν•œλ‹€. 잘λͺ»λœ μ˜ˆμΈ‘μ— μ˜ν•΄ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ 였λ₯˜λ₯Ό λΏœμ–΄λ‚Ό 것이닀.
  • μœ μ—°μ„±μ€ λ†’μ§€λ§Œ 신뒰성은 떨어진닀. 

 


 

πŸ’‘ μ •μ  νƒ€μž… μ–Έμ–΄ static/strong type

  • C, C++, Java, Kotlin λ“±
  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ” 데이터 νƒ€μž…μ„ μ„ μ–Έν•΄μ•Ό ν•œλ‹€. (λͺ…μ‹œμ  νƒ€μž… μ„ μ–Έ)
// 1λ°”μ΄νŠΈ μ •μˆ˜ νƒ€μž…μ˜ κ°’λ§Œ ν• λ‹Ήν•  수 μžˆλ‹€
char c;

// 4λ°”μ΄νŠΈ μ •μˆ˜ νƒ€μž…μ˜ κ°’λ§Œ ν• λ‹Ήν•  수 μžˆλ‹€
int num;
  • λ³€μˆ˜μ˜ νƒ€μž…μ„ λ³€κ²½ν•  수 μ—†μœΌλ©°, λ³€μˆ˜μ— μ„ μ–Έν•œ νƒ€μž…μ— λ§žλŠ” κ°’λ§Œ ν• λ‹Ήν•  수 μžˆλ‹€.
  • 컴파일 μ‹œμ μ— μ„ μ–Έν•œ 데이터 νƒ€μž…μ— λ§žλŠ” 값을 ν• λ‹Ήν–ˆλŠ”μ§€ κ²€μ‚¬ν•˜λŠ” νƒ€μž… 체크λ₯Ό μˆ˜ν–‰ν•˜κ³ , λ§Œμ•½ νƒ€μž…μ²΄ν¬λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€λ©΄ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€κ³  ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 자체λ₯Ό λ§‰λŠ”λ‹€.
  • 이λ₯Ό 톡해 νƒ€μž…μ˜ 일관성을 κ°•μ œν•¨μœΌλ‘œμ¨ λ”μš± μ•ˆμ •μ μΈ μ½”λ“œμ˜ κ΅¬ν˜„μ„ 톡해 λŸ°νƒ€μž„μ— λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό 쀄인닀.

 

 

πŸ™Œ μ°Έκ³ μ„œμ 

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive

λ°˜μ‘ν˜•

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

TIL02 | JavaScript λ°°μ—΄  (0) 2021.09.27
TIL01 | JavaScrpit λ³€μˆ˜  (0) 2021.09.26
[JS] undefined와 null  (0) 2021.07.10
[JS] async function  (0) 2021.07.08
[JS] Promise κ°œλ… 및 ν™œμš©  (0) 2021.07.06