변수의 타입이 데이터를 저장하고, 그것을 해석하는데에 어떠한 영향을 미치는지에 대한 이해가 선행되어야 정적, 동적타입에 대해 정확한 이해를 할 수 있다. 그래서 정적/동적 타이핑에 대해 알아보기 전에 먼저 이것에 대해 공부해보겠다.
데이터타입이 필요한 이유
값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정
값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정
타입이 데이터의 해석에 어떠한 영향을 미치는지를 예시를 통해 살펴보자.
<예시1> 이 메모리 공간에서 이 위치에 given이라는 변수나 인자가 주어졌을때 그로부터 몇칸을 읽어들일지를 자료형으로 판단한다.
boolean이라면 한칸을 읽어서 false가 나오고
가위바위보라면 두칸을 읽어서 바위가 나오고
요일이라면 세칸을 읽어서 수요일로 인식된다.
<예시2> 메모리에 저장된 값 0100 0001을
숫자로 해석하면 65
문자열로 해석하면 A.
데이터를 저장할 때 뿐만아니라 주어진 위치에서 데이터를 읽을때도 중요하다.
실제 자료형들은 데이터를 저장하는 방식들도 여러가지이기 때문에, 읽어들인 비트들을 어떻게 해석하는지도 타입에 따라 결정된다.
변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 데이터타입을 사전에 정의한다.
1️⃣ 시점: 변수선언시점 변수의 타입결정
2️⃣ 타입변경: 변수의 타입을 변경 X
미리 변수에 선언한 타입에 맞는 값만 할당 가능
3️⃣ 컴파일언어가 많다
컴파일시점에 타입체크
선언한 데이터타입에 맞는 값을 할당했는지 검사 ➡️ 에러발생 ➡️ 프로그램실행 🚫
4️⃣ C, C++, JAVA, Kotilin, Go, Haskell,, Rust, Scala
변수에 할당되어 있는 값에 의해 변수이 타입이 동적으로 결정된다.
1️⃣ 시점: 값을 할당하는 시점 변수의 타입이 동적으로 결정
변수를 선언할 때 타입선언 X
typeof
변수는 타입을 가지지 X
값이 타입을 가진다 O
변수의 데이터타입반환(X)
변수에 할당된 값의 데이터반환(O)
2️⃣ 타입변경: 타입 언제든지 변경가능
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. ➡️ 동적타이핑
(이미 변수를 선언했다고 하더라도 자유롭게 데이터타입에 상관없이 할당가능)
3️⃣ 인터프리터언어가 많다
4️⃣ JavaScript, Pyton, PHP, Ruby, Lisp, Perl
유연성⬆️ 신뢰성⬇️
단점:
동적타입언어는 간단한 코드를 짤때는 편하지만 프로젝트규모가 커지면 숫자형함수에 문자열이 들어가는 등 자료형이 잘못들어가서 런타임 오류의 위험성이 커진다. 코딩중이 아니라 실행 시점이 되어서야 문제가 터질 수 있다.
↔️ 비교: 컴파일 언어는 코드를 실행하거나 배포하기 전, 개발과정에서 컴파일이란 과정을 거치기 때문에 코드중 철자나 문법상의 오류가 있을때 컴파일 단계에서 오류를 발생시켜서 잡아낼 수 있다.
자바스크립트의 이러한점 때문에 사용시 주의점이 몇가지 있다.
자바스크립트에서 변수를 사용할때 주의점
변수는 꼭 필요할 때만 사용한다.
변수의 유효범위(스코프)는 최대한 좁게 만든다
전역변수는 최대한 사용하지 않는다.
변수보다는 상수를 사용해 값의 변경을 억제한다. (const)
변수의 이름은 변수의 목적이나 의미를 파악할 수 있도로 네이밍한다.
✍️강의를 듣고 책을보면서 직접 공부하고 정리한 내용입니다📚
모던자바스크립트
얄팍한코딩사전 자료형과 정적/동적 타입