티스토리 뷰

  • 동적타입언어와 정적타입언어의 차이를 알기 위해, 변수의 타입에 대해서 먼저 알아봅시다.

변수의 타입

  • 변수에 들어갈 데이터의 타입에 따라 나눈 것입니다. (변수가 저장되는 데이터의 종류)

C language (정적타입 언어)

  • int, float, char등등 다양한 변수 타입이 존재합니다.

    이러한 타입은 컴파일 하면서 결정됩니다.

  1. 컴파일 하는 과정에서, #include <stdio.h> 헤더파일의 내용을 삽입힙니다.

  2. 그러면서 int i = 5를 발견하면 그에 맞는 stack공간에 변수를 할당하여 5를 넣습니다.

  3. 모든 코드를 컴파일하면, 링킹을 하여 exe파일을 생성합니다.

  4. exe파일을 load하고 프로세스가 실행됩니다.

  • int i = 5는 exe파일이 실행되기 전에 변수의 타입이 정해집니다.
  • 데이터 타입에 1대1 대응하는 선언 키워드가 있습니다.

Javascript (정적타입 언어)

  • 자바스크립트에는 7가지의 데이터 타입이 있습니다.

    • boolean, null, undefined, number, string, symbol, 그리고 object입니다.

    • object를 제외한 다른 데이터 타입은 원시타입으로, 변경이 불가능 한 값을 의미합니다.

      • 문자열은 한번 생성되면 그 문자열을 바꿀 수 없습니다. 그래서 strcat를 한다고 해도 새로운 문자열을 만들고 두 문자열을 연결합니다

      • 또한, call by value와 같은 방법으로 전달됩니다.

        • new로 할당한 변수는 객체를 리턴합니다(생성자 함수는 객체를 리턴)
        • 하지만, 그냥 할당한 것은 원시 값입니다.
    • 선언 이후, 할당되지 않은 변수는 undefined값을 가집니다. JS엔진에 의해 할당된 변수가 assign되기 전에는 자동으로 초기화 합니다.

    • 하지만, object타입은 조금 다릅니다.

      • call by reference와 비슷한 방식입니다. (참조에 의한 전달)
  • 데이터 타입과 일대일 대응하지 않습니다(const, let)

  • JS는 실행하면서 변수의 타입을 정합니다. 그래서 동적언어라고 합니다.

정적언어 VS 동적언어

  • 정적언어는 프로그램이 실행하기 전에 미리 변수의 데이터 타입에 맞는 키워드를 이용합니다. 그래서 컴파일 하는 과정에서 해당 변수의 타입에 필요한 만큼 메모리를 할당합니다. 그리고 exe파일을 실행합니다.

  • 실행시간과 변수의 할당은 무관합니다(동적할당 제외)

  • 동적언어는 실행하는 과정에서 assign한 값에 맞춰서 데이터 타입을 정합니다. 컴파일 시에 자료형이 정해지는 것이 아닙니다.

  • 장점으로는, 개발자가 데이터 타입에 대해서 고려할 필요가 없습니다. 알아서 정해줍니다.

  • 하지만, Type Error가 발생 할 수도 있고, 실행 중에 타입이 정해지기 때문에, 실행시간이 느려질 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함