JavaScript의 자료형과 JavaScript만의 특성은 무엇일까 ?

김대은·2022년 7월 21일
0

느슨한 타입(loosely typed)의 동적(dynamic) 언어


정적타입(Statically typed) vs 동적타입 (Dynamically typed)

  1. 정적타입의 언어
    정적타입 언어(Statically typed language)는 컴파일 시 변수의 타입이 결정되는 언어를 말합니다.
    따라서, 프로그래머가 변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 합니다.

    String num = "123"
    int num =123

    정적언어라는 것은 위에서 언급한 '타입' 즉 자료형을 컴파일 시에 결정하는 것 입니다. 
    컴파일 시에 자료형에 맞지 않는 값이 들어있으면 컴파일 에러가 발생합니다.
    정적타입의 언어로는 Java, C, C++, C#, Scala,  Fortran, Haskell, ML, Pascal 등이 있습니다.
  • 장점
  1. 타입 에러로 인한 문제점을 초기에 발견할 수있어 타입의 안정성이 높음
  2. 컴파일할때 타입을 정해주기 때문에 실행 속도가 빠름
  • 단점
    1.매 코드 작성 시 마다 타입을 결정해줘야하는 번거로움

2.동적타입의 언어
동적타입 언어(Dynamically typed languages)는 컴파일 시 자료형을 정하는 것이 아니라 런타임 시 결정됩니다

let num =123
num ="123"

두 번째 줄에 num을 String으로 다시 선언하더라도 타입 에러 없이 컴파일 됩니다.
동적타입 언어로는 Groovy, Python, JavaScript, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog 등이 있습니다

  • 장점
  1. 런타임까지 타입에 대한 결정을 미룰 수 있어 유연성이 높음
  2. 컴파일시 타입을 명시 할 필요가 없어 빠르게 코드를 작성 할 수 있음.
  • 단점
  1. 실행 도중 변수에 예상치 못한 타입이 들어와 타입에러가 발생 할 수 있음.

동적타입 언어는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워 집니다.
이러한 불편함을 해소하기 위해 TypeScipt나 Flow 등을 사용할 수 있습니다.

JavaScript의 자료형


JavaScript의 타입

  • 원시값 ( 객체를 제외한 모든 타입은 불변값을 정의한다.)
  1. Boolean 타입 ( true, false )
  2. Null 타입
  3. Undefined 타입
  4. Number 타입
  5. Bigint 타입
  6. String 타입
  7. Symbol 타입
  • 객체

Undefined 와 null의 차이점

undefined은 변수를 선언하고 값을 할당하지 않은 상태, null은 변수를 선언하고 빈 값을 할당한 상태(의도적 빈 객체)이다.
즉, undefined는 자료형이 없는 상태이다.
따라서 typeof를 통해 자료형을 확인해보면 null은 object로, undefined는 undefined가 출력된다.

  • typeof undefined는 출력하면 undefined이다.
  • typeof null은 출력하면 object이다. 하지만 이는 여전히 원시 타입(primitive value)로, JavaScript에서는 구현 버그로 간주한다.
  • undefined == null은 true이다.
profile
매일 1% 이상 씩 성장하기

0개의 댓글