#정의
정적타입(Static Typed) 언어와 동적타입 언어( Dynamic Typed)를 구분하는 기준은 코드의 상수, 변수, 함수 등에 대한 타입을 언제 확인하는지입니다. 타입을 컴파일 타임에 확인하는 언어를 정적타입 언어라 하고 런타임에 확인하는 언어를 동적타입 언어라 합니다.
#정적 타입
프로그래밍은 변수를 통해 값을 저장하고 참조하며 연산자로 값을 연산, 평가하고 조건문과 반복문에 의한 흐름제어로 데이터의 흐름을 제어하고 함수로 재사용이 가능한 구문의 집합을 만들며 객체, 배열 등으로 자료를 구조화하는 것입니다.
변수는 값의 위치(주소)를 기억하는 저장소이다. 값의 위치란 값이 위치하고 있는 메모리 상의 주소(address)를 의미합니다.
즉, 변수란 값이 위치하고 있는 메모리 주소(Memory address)에 접근하기 위해 사람이 이해할 수 있는 언어로 명명한 식별자(identifier)입니다.
C나 Java같은 C-family 언어는 정적 타입(Static/Strong Type) 언어로 변수 선언 시 변수에 저장할 값의 종류를 사전에 타입 지정(Type annotation)하여야 합니다. 예를 들자면 아래와 같습니다.
// 1byte 정수형: -128 ~ 127
char c;
// 4byte 정수형: -2,124,483,648 ~ 2,124,483,647
int num;
#정적타입의 장점
정적타입 언어는 컴파일시 타입에 대해 미리 확인하기 때문에 타입 관련한 런타임 오류를 방지할 수 있습니다. 특히 사용자에게 배포되는 앱의 경우 타입 관련한 검증을 컴파일타임에 하지않고 런타임에 하게 되면 앱사용시 타입 불일치로 인한 크래시가 발생 위험이 높아집니다.
정적타입 언어의 또 다른 장점은 코드의 가독성 입니다. 타입이 명시적으로 지정돼 있기 때문에 타입을 머리로 계산해 읽어야 하는 동적타입 언어에 비해 코드의 가독성이 좋습니다. 그래서 다수의 협업이나 프로젝트의 장기개발 및 유지보수에 유리합니다.
#컴파일
주어진 language로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스
즉 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정
#동적 타입
자바스크립트는 동적 타입(Dynamic/Weak Type) 언어입니다. 변수의 타입 지정(Type annotation)없이 값이 할당되는 과정에서 자동으로 변수의 타입이 결정(타입 추론, Type Inference)됩니다.
즉, 변수는 고정된 타입이 없습니다. 따라서 같은 변수에 여러 타입의 값을 자유롭게 할당할 수 있습니다.
예시를 들자면 아래와 같습니다.
var str = 'Hello';
var num = 1;
var bool = true;
var foo = 'string';
console.log(typeof foo); // string
foo = 1;
console.log(typeof foo); // number
#동적타입의 장점
동적타입언어는 사용하기 위해 지켜야할 규칙이 적기 때문에 상대적으로 코드가 짧고 Learning-Curve가 낮습니다.
//Learning-Curve - 익숙하지 않아 많은 시간이 필요로 하지만 계속해서 반복할수록 그 효과가 배가 된다는 것을 나타내는 현상을 학습효과
#컴파일
컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부릅니다.
'모르는용어 정리' 카테고리의 다른 글
얕은 복사와 깊은 복사 (1) | 2023.01.20 |
---|---|
undefined와 null (0) | 2023.01.20 |
기본형과 참조형 데이터 (0) | 2023.01.20 |
var let const 호이스팅 (0) | 2023.01.20 |
전역변수 (0) | 2023.01.20 |