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

2021. 7. 10. 22:01언어/Javascript

반응형

💡 동적 타입 언어 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