본문 바로가기
👩‍💻TIL/기술면접

정적타입 언어 vs. 동적타입 언어 특징 비교하기

by devuna 2020. 9. 10.
728x90

[Groovy] 정적타입 언어 vs. 동적타입 언어 특징 비교하기

자바를 사용하다 최근 그루비를 사용하며 개인적으로 느꼈던 가장 큰 차이 하나를 꼽자면 바로 자료형에 대한 명시 여부였습니다. groovy는 자바스크립트와 같은 동적타입을 지원하는 언어이므로, 따로 자료형에 대한 명시하지 않아도 런타임시 알아서 자료형을 넣어줍니다. (적응되니 너무 편했지만 상황에 따라 타입에러가 발생하는 경우도 있으니 주의!)


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

먼저, 변수의  타입이란 int, short, float, String, 객체 와 같은 자료형을 뜻합니다.

 

💡 정적타입 언어란?

정적타입 언어(Statically typed language)는 컴파일 시 변수의 타입이 결정되는 언어를 말합니다.

따라서, 프로그래머가 변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 합니다.

String name ="tuna"
int num = 123

(참고로 groovy에서는 마지막에 세미콜론 없이 코드 작성 및 실행이 가능합니다.)

 

정적언어라는 것은 위에서 언급한 '타입' 즉 자료형을 컴파일 시에 결정하는 것 입니다. 

컴파일 시에 자료형에 맞지 않는 값이 들어있으면 컴파일 에러가 발생합니다.

정적타입의 언어로는 Java, C, C++, C#, Scala,  Fortran, Haskell, ML, Pascal 등이 있습니다.

장점 :

타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높음

컴파일 시에 미리 타입을 결정하기 때문에 실행속도가 빠름


단점 : 

매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있음

 

 

💡 동적타입 언어란?

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

다음과 같이 타입 없이 변수만 선언하여 값을 지정할 수 있습니다.

def num = 123 //groovy에서는 타입이 정해지지 않은 변수를 선언할때 def를 사용합니다.

num = "일이삼"

위의 예시에서 타입 선언이 없었지만,  num이 123 이란 숫자로 선언이 됩니다.

 

두 번째 줄에 num을 String으로 다시 선언하더라도 타입 에러 없이 컴파일 됩니다.

동적타입 언어로는 Groovy, Python, JavaScript, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog 등이 있습니다.

 

장점 :

런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음

컴파일시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음

 

단점 :

실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있음

 

 

동적타입 언어는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워 집니다.

이러한 불편함을 해소하기 위해 TypeScipt나 Flow 등을 사용할 수 있습니다.

 

728x90

댓글