으니의 개발로그

[JavaScript] 동적 약타입 프로그래밍 언어 본문

Front-end/JavaScript

[JavaScript] 동적 약타입 프로그래밍 언어

아잉으니야 2023. 1. 5. 08:28

동적 타입은 무엇인가?

국어사전에서 ‘동적’이라는 말의 찾아보면 움직이는 성격의 라는 뜻이라고 나온다. 그렇다면 동적 타입은 움직이는 성격의 타입이라는 것인데… 움직이는 성격의 타입이라는 게 어떤 걸 의미하는걸까?

 

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 예를 들어 let a = 'eun' 이라고 문자를 변수에 할당했다고 하자. 그러면 a 라는 변수의 타입은 string 으로 지정 됐을 것이다. 하지만! 이후에 a = 3 이라고 숫자를 할당 했을 때 오류가 생기지 않고 변수의 타입이 number로 변할 것이다. 이처럼 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 우리는 동적 타이핑이라고 하며 런타임시점에 타입이 정해지게 된다. 이러한 언어를 동적 타입 언어라고 하는데, 대표적인 동적 타입 언어로는 자바스크립트, 파이썬, PHP, 루비, 리스프, 펄 등이 있다.

 

그렇다면 이렇게 편리한데! 그러면 모든 언어를 동적 언어로 바꾸면 안될까? 응, 안돼~ 

편리하다는 것은 항상 이면에 위험이 도사리고 있다는 것이다. 변수의 타입이 언제든 변경가능하기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다. 게다가 개발자 의도와 상관없이 자바스크립트 엔진이 타입을 바꿀 수도 잇다. 즉, 잘못된 예측을 할 수도 있다는 것이다. 그러면 당연히 오류가 생길 것이다. 결국 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다. 그래서 자바스크립트에서는 웬만하면 let 보다는 const 를 많이 사용하게 좋다.

 

그렇다면 정적 타입은 어떤 것일까?

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

대표적인 정적 타입 언어로는 C, C++, 자바, 코틀린, 고, 하스켈, 러스크, 스칼라 등이 있다.

 

정리

  • 동적 해석형 언어
    • 미리 컴파일되지 않았음을 의미.(C++와 같은 다른 언어는 개발 중 또는 개발 후에 컴파일 됨. 즉, 최종 사용자와 공유하기 전)
    • 코드가 런타임에 평가되고 실행됨
    • 코드가 런타임에서 변경될 수 있음 (ex. 변수 타입)
  • 약형 언어
    • 데이터 타입을 자동으로 유추함
    • 변수의 데이터 유형을 정의하지 않아도 됨
    • 데이터 유형은 고정되어 있지 않으며 바뀔 수 있음

 

참고자료

[책] 모던 자바 스크립트 Deep Dive

[강의] JavaScript 완벽 가이드 : 초급 + 고급 마스터 과정