[Deep Dive] 동적 타이핑

sangyong park·2022년 9월 2일
0
post-thumbnail

Today I Learned

정적 타입 언어

정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류,
즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언이라 한다.

c에서 정수 타입의 변수를 선언하는 예다.

<script>
// 변수 c에는 1byte 정수 타입의 값(-128 ~ 127)만을 할당할 수 있다.
char c;

// 변수 num에는 4byte 정수 타입의 값(-2,124,483,648 ~ 2,124,483,647)만을 할당할 수 있다.
int num;
</script>

정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
정적 타입 언어는 컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행한다. 만약 타입 체크를 통과하지 못했다면 에러를 발생시키고 프로그램의 실행 자체를 막는다.

동적 타입 언어

동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
이와 같이 자바스크립트도 변수를 선언할 때 타입을 선언하지 않는다. 다만 var , let , const 키워드를 사용해 변수를 선언할 뿐이다.

변수를 하나 선언한 뒤 다양한 데이터 값을 할당한 다음 , typeof 연산자로 살펴보기

<script>
var foo;
console.log(typeof foo);  // undefined

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

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

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

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

foo = Symbol();
console.log(typeof foo);  // symbol

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

foo = [];
console.log(typeof foo);  // object = 배열도 객체이다.

foo = function () {};
console.log(typeof foo);  // function
</script>

자바스크립틍의 변수에는 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있으므로 정적 타입 언어에서 말하는 데이터 타입과 개념이 다르다. 정적 타입 언어는 변수 언선 시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없다.

하지만 자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있다.

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑 이라 하며, 자바스크립트를 정적 타입 언어와 구별하기 위해 동적 타입 언어라 한다.

profile
Dreams don't run away It is always myself who runs away.

0개의 댓글