[python] 정적 타이핑 vs 동적 타이핑

EMMA·2022년 5월 2일
0

Type system이란

"자료형 체계" 라고 하며, 값/표현식/함수/모듈 등을 분류하는 규칙의 집합이다. (출처: 위키백과)
"we are referring to the data types and the associated manipulation allowed by that language." (출처: https://prateekvjoshi.com/2014/10/03/static-vs-dynamic-typing/)

type system에는 크게 2가지가 있다.

  • Static type checking
  • Dynamic type checking

프로그램이 자료형의 규칙을 지키는지 검증하는 과정을 자료형 검사라고 한다. 이 검사가 컴파일 타임 동안 진행되면 정적 타이핑, 런타임 동안 진행되면 동적 타이핑으로 분류한다.


정적 타이핑

자료형 검사가 컴파일타임 동안 진행되면 정적 타이핑으로 분류한다.
대표적으로 C, C++, JAVA 등의 컴파일 언어가 이에 해당.

검사가 컴파일 동안 진행된다는 것의 의미는, 변수의 자료형을 사전에 지정해야 한다는 것이다.
(C, JAVA를 생각해보면 int, str,float 등의 자료형을 미리 지정하고 변수를 선언해야 한다)

#Java 

int a;
String b;

a = 1;
b = "hello java";

자료형에 대한 판단을 사전에 하기 때문에 진행 속도가 빠르다.
당연히 type error로 인한 문제점들을 초기에 발견하기 쉽다.

  • complile: 원래의 소스 코드(원시 코드)를 목적 코드(기계어, 프로그램이나 하드웨어가 처리하기 용이한 형태)로 옮기는 것을 말한다
  • interpret: 프로그래밍 언어의 소스 코드(원시 코드)를 바로 실행하는 것

동적 타이핑

자료형 검사가 런타임 동안 진행되면 동적 타이핑으로 분류한다.
PHP, python, Ruby 등의 인터프리터 언어가 이에 해당된다.

#python 

a = 1
b = "hello python"

자료형에 대한 정보를 미리 할 필요가 없다. python만 봐도 해당 자료형이 int인지 str인지 지정하지 않고 바로 변수를 선언할 수 있다.

이미지 출처: https://prateekvjoshi.com/2014/10/03/static-vs-dynamic-typing/

개발자 입장에선 당연히 편하고 상대적으로 light하게 느껴진다.
하지만 런타임 도중 예상하지 못한 에러가 발생할 확률이 높다.


동적 타이핑 언어의 단점

하지만 반드시 동적 타이핑 언어라고 해서 좋은 것만은 아닌 것 같다.
일단 속도가 느리다. 자료형을 처음에 정해주지 않을 뿐, 상황에 맞게 결국 판단해야 하므로 실행 속도가 상대적으로 느릴 수 밖에 없다. 그리고 한 줄 씩 순서대로 기계어로 번역하기 때문에 이 역시 속도를 느리게 하는 특징 중 하나(python의 대표적인 단점).

그리고 정적 타이핑 언어는 초기에 자료형을 지정하므로 훨씬 safe하고 디버깅/유지 및 보수 하기도 쉬운 측면이 있다.


참고 자료
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C%ED%98%95_%EC%B2%B4%EA%B3%84
https://prateekvjoshi.com/2014/10/03/static-vs-dynamic-typing/

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글