본문으로 바로가기

3.1 변수 선언

  기존의 자바스크립트에서는 var선언자를 사용하여 변수를 선언.

  var로 선언한 변수는 호이스팅되어 선언된 위치와 상관없이 호출 할 수 있음

  호이스팅의 문제를 방지하기위해 let 선언자를 사용

 

  3.1.1 var 선언자의 특징

    var선언자로 선언된 변수의 특징 - 호이스팅, 함수레벨 스코프 지원

    호이스팅이 - 선언한 변수가 스코프의 최 상단으로 끌어올려지는 현상

    함수레벨 스코프 - 함수내에서 선언한 변수는 해당 함수 내부에서만 유효하고 외부에서는 참조 할 수 없음

    블록레벨 스코프가 아니기때문에 함수로 구분되지 않으면 블록이 다르더라도 영향을 주고 받게됨

  3.1.2 let 선언자의 특징

    기존 var선언자의 문제점을 해결하기 위해 es6에 let선언자 등장

    let선언자의 특징 - 같은 블록 내에서 같은이름의 변수를 중복해서 선언 할 수 없음, 변수를 초기화 하기전에는 변수에 접근 불가(호이스팅

                                불가), 블록레벨 스코프 적용

  3.1.3 상수 선언

    const는 변수를 상수로 선언하기위해 es6에서 지원하는 선언자

    let과 마찬가지로 호이스팅을 방지하고 블록레벨 스코프를 지원

    let과 다른점은 const는 선언시 초기화는 가능하지만 재할당은 불가능 하다는 것

   const로 선언한 변수라도 객체 리터럴의 속성으로는 변경 할 수 있음, 값 자체를 변경하는것은 허용하지만 속성값의 변경을 허용하기 때문

 

3.2 타입 검사와 타입 선언

  3.2.1 점진적 타입 검사

    정적 타입 검사 - 자료형을 컴파일 시에 결정, 자바, c++등에서 사용, 변수에 들어갈 값의 형태에 따라 자료형을 지정해주어야 함, 컴파일

                             시에 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생
                             장점 : 컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑ , 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입

                                      의 안정성↑

    동적 타입 검사 - 컴파일 시 자료형을 정하는 것이 아니고 실행 시에 결정,  타입 없이 변수만 선언하여 값을 지정

                            장점 : Run time까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있음.

                              단점 : 배우기는 쉬우나 실해 도중 변수에 예상치 못한 타입이 들어와 TypeError를 뿜는 경우가 생길 수 있음

    점진적 타입 검사 - 컴파일시에 타입검사를 수행하면서 필요에 따라 타입선언의 생략을 허용. 타입선언 생략시 암시적 형변환이 일어남

  3.2.2 자바스크립트의 동적 타이핑                              
    자바스크립트는 값을 할당 할 때 타입이 정해짐

    타입스크립트의 경우 타입을 선언하지 안으면 입력값에 따라 타입이 결정

  3.2.3 타입 계층도

    기본 타입 - string, number, boolean, symbol, enum, 문자열 리터럴

    객체 타입 - Array, Tuple, Function, 생성자, Class, Interface

    기타 타입 - 유니언, 인터섹션, 특수타입

      유니언: 2개 이상의 타입을 하나의 타입으로 정의한 타입

      인터섹션: 2개의 타입을 합쳐 하나로 만들 수 있는 타입

      특수 타입: void, null, undefind - 빈값을 나타내지만 성격이 다름

   3.2.4 변수에 타입 지정

     var <변수 식별자>:<타입> = <값>;

     명시적 타입표기를 통하여 변수에 어떤 값이 들어갈 지 지관적으로 알 수 있음

 

  3.3 자바스크립트의 타입

    3.3.1 자바스크립트의 내장 타입

      boolean number string - 전역객체를 통해 직접 생성 가능 (ex let type1 = new Boolean(false); )

    3.3.2 symvol 타입

      es6에 추가된 속성으로 객체 속성의 유일하고 불변적인 식별자로 사용

      const를 사용하면 불변상수로 선언가능

    3.3.3 enum 타입

      es6에서 추가, 컴파일시에 평가

      number타입의 하위타입으로 자바스크립트로 컴파일 후에는 객체 리터럴이나 배열처럼 객체타입이 됨

 

  3.4 타입스크립트의 내장 타입

    3.4.1 any 타입

       제약이 없는 타입으로 어떤 타입의 값도 받아들일 수 있음

       any타입으로 선언된 변수는 최소한의 정적 타입검사만 수행

      object타입도 any타입처럼 타입 구분없이 값을 할당 할 수 있는점은 비슷하나, 속성 유무를 검사하는 시점이 다름

      any타입으로 선언한 변수는 속성 유무를 런타임시에 하지만 object타입으로 선언한 변수는 컴파일 시에 함

      tsconfig에 noImplicitAny를 true로 설정하면 any타입의 사용을 강제 할 수 있음

    3.4.2 배열 타입과 제네릭 배열 타입

      배열 - 요소개수의 제한이 없고, 특정 타입으로 배열 요소의 타입을 강제 할 수 있음

      제네릭 배열 - Array<T> 형태로 선언, T는 타입

   3.4.3 튜플 타입

     n개의 요소로 이뤄진 배열에 대응하는 타입

     튜플에 선언된 타입 수와 배열의 요소 수가 정확히 일치해야 할당 가능
   3.4.4 void, null, undefind

     void - 함수의 반환값이 없을 때 지정하는 타입, void에는 null, undefind만 할당 가능

    null이나 undefind는 불필요한 선언이 되거나 초기화하지 않알을 때 불안정한 연산을 초래 할 수 있음.

 

 

 

 

    

 

 

 

'개발 > JavaSctipt' 카테고리의 다른 글

타입스크립트 - 06 함수  (0) 2020.04.02
타입스크립트 - 05 연산자  (0) 2020.03.24
타입스크립트 - 04 제어문  (0) 2020.03.24
실행 컨텍스트(Execution Context)  (0) 2020.01.02