Kotlin

[Kotlin] 정적 타입 언어 vs 동적 타입 언어

카미유 2021. 12. 25. 05:56

정적 타입(Statically typed) 언어

정적 타입 언어는 컴파일 타임에 타입 검증이 일어난다. 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다.

기본적으로 자바, C, C++는 모든 변수의 타입을 프로그래머가 직접 명시해야 한다(언어의 버전이 올라가면서 타입 추론 기능을 지원하기도 한다). 하지만 정적 타입 언어 중에서도 코틀린, 하스칼, 오카멜(OCaml)과 같은 언어는 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추하여 프로그래머가 타입 선언을 생략할 수 있다. 컴파일러가 문맥을 고려해 변수 타입을 결정하는 기능을 타입 추론(type inference)이라고 한다.

var x = 1

위의 코드는 코틀린으로 작성되었다. 변수를 정의하면서 정수 값으로 초기화하는데, 코틀린은 이 변수의 타입이 Int임을 자동으로 알아낸다. 이런 기능을 타입 추론이라 부른다.

장점

  • 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠르다.
  • 신뢰성 : 컴파일러가 프로그램의 정확성(correctness)을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.
  • 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
  • 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링이 가능하며, 더 정확한 코드 완성 기능을 도구가 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.

예시

  • C, C++, Java, Kotlin, Rust, Go, Scala, OCaml, Haskell

동적 타입(Dynamically typed) 언어

동적 타입 언어는 컴파일 타임이 아닌 런타임에 타입 검증이 일어난다.

장점

  • 타입과 관계없이 모든 값을 변수에 넣을 수 있다.
  • 메소드나 필드 접근에 대한 검증이 런타임에 일어나며, 그에 따라
    • 코드가 더 짧아지고,
    • 데이터 구조를 더 유연하게 생성하고 사용할 수 있다.

예시

  • Perl, Ruby, Python, PHP, JavaScript

References