[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 |