Dynamic type vs Static type

Sungmin LeeSungmin Lee
2 min read

Where does this come from?

우리가 프로그래밍 언어를 공부할 때 변수 생성 및 데이터 구조를 공부한다면 Dynamic Type과 Static Type이라는 단어를 볼 수 있다.

위 사진은 JavaScript의 Document의 일부이다. Data type을 설명하는 부분에서 JavaScript가 dynamic한 언어라는 것을 설명하며 dynamic type을 가지고 있다고 말한다. Dynamic type이 무엇인지 자세하게 알아보자.

Dynamic type

Dynamic type은 변수의 type이 runtime에 결정이 되는 것을 말한다. 이러한 특징 때문에 코드를 작성할 때 변수의 Type을 유연하게 작성할 수 있다. 다음은 Dynamic type인 JavaScript의 예시이다.

var data = 'Hello World'; //string type
console.log(typeof data); //Output: string

data = 15;                //number type
console.log(typeof data); //Output: number

위의 코드에서는 data라는 변수는 처음에 string의 type을 가지고 있다가 number의 type으로 변한다. 이렇게 변수의 타입이 자유롭게 변할 수 있게 되는데 이를 dynamic typing 이라한다.

Dynamic type의 대표적인 언어가 Python과 JavaScript이다.

Dynamic type’s advantages and disadvantages

Dynamic type을 사용하면 유연성과 편리성을 챙길 수 있다. 변수에 데이터를 대응시킬 때 type을 신경쓰지 않아도 된다. 하지만, 이러한 유연성과 편리성 때문에 발생하는 단점도 존재한다. 시간적인 측면에서 변수의 타입이 정해진 Static type보다는 느리다. type에 따라 할당 받는 메모리의 크기과 형태가 달라지기 때문에 매 순간 이를 고려하는 시간의 낭비가 발생한다. 또한, 코드가 길어질 경우 type이 많이 바뀌는 변수는 코드 해석을 어렵게 한다.

Static type

Static typing은 Dynamic typing의 반대로 변수가 생성될 때 코드에서 변수의 타입을 명확하게 지정해준다. 다음은 Static typing을 사용하는 C++의 예시이다.

#include <stdio.h>
#include <typeinfo>

int main(){
    int data = 10; //integer type

    printf(typeid(data).name());

    return 0;
}

Static type 변수에서는 변수를 선언할 때 type을 명시해준다. 이를 통해 type에 해당하는 메모리 영역에 저장을 할 수 있게 된다.

만약 type을 바꾸고 싶다면 어떻게 할까? 일반적으로는 새로운 변수를 설정하여 따로 저장을 하거나 C++의 경우 포인터를 사용하는 방법을 사용하여 데이터를 간접적으로 주소를 저장하기도 한다.

대표적인 Static type을 사용하는 언어는 C++, Java, C#등이 있다.

Static type’s advantages and disadvantages

Static type의 장점과 단점은 Dynamic type의 반대이다. 장점은 에러가 일어날 경우 컴파일 과정에서 발견되며 에러를 수정하기 비교적 쉽다는 것이다. 또한, data의 type에 맞는 메모리 공간이 할당되어 있어 최적화가 더 쉽게 되고 효율적인 코딩을 할 수 있다. 반면에 단점은 유연성이 매우 낮고, 변수의 type 변화를 하기 위해서 새로운 변수를 설정하는 것과 같이 코드가 더 길어진다는 것이다.

0
Subscribe to my newsletter

Read articles from Sungmin Lee directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sungmin Lee
Sungmin Lee