본문 바로가기

TIL

[Sub TIL] Kotlin - 정적 타입, 동적 타입 + Kotlin 변수 타입 특징

Topic =  동적 타입, 정적 타입 언어가 어떤 식으로 구분되는지 알아보고 Kotlin 은 어떠한 형태로 어떠한 특징을 지니는지

 

 


 

정적타입 ( Static Type ) , 동적타입 ( Dynamic Type ) 을 구분하는 방법?

 

1. 유형 검사를 언제 수행하는가?

  • 동적 타입
    • 런타임 시 유형 검사를 수행
  • 정적 타입
    • 컴파일 시 유형 검사를 수행

 

2. 변수 타입 선언 유/무

  • 동적 타입
    • 변수를 사용하기 전에 별도로 타입을 선언하지 않아도 된다.
  • 정적 타입
    • 변수를 사용하기 전에 별도로 타입을 선언해주어야 한다

 

위와 같이 동적 타입의 언어와 정적 타입의 언어는 변수 타입을 별도로 선언해주어서 컴파일 시 변수 타입을 지정해주는 것과 런타임 시 변수 타입을 추론하는 것의 차이로 확인할 수 있다.

동적 타입을 통해 변수를 사용하는 언어로는 파이썬, 자바스크립트, Ruby, PHP 가 대표적인 예시로 들 수 있고, 정적 타입의 언어로는 자바, C++, C#, Kotlin, Swift, Rust 를 대표적인 정적타입 언어의 예시로 들 수 있다.

 

 

동적 타입, 정적 타입 각각의 장단점

 

  • 동적 타입의 장점 
    • 간결한 코드 작성이 가능하다.
    • 정해진 타입이나 스키마가 없이 언제든 객체에 속한 변수나 메소드가 있다면 외부에서 호출이 가능하는 등 유연하게 변수를 사용할 수 있게 된다.
  • 동적 타입의 단점
    • 변수의 타입 추론에 알맞지 않은 값이 들어오게 될 경우 런타임 중 타입 오류가 발생할 수 있다.
    • 타입 오류가 런타임 시 발생하기 때문에 컴파일 시 에러를 발견할 수 있는 정적 타입 언어에 비해 디버깅에 소요되는 시간이 오래 걸린다.

 

  • 정적 타입의 장점
    • 컴파일 시 타입 오류를 확인할 수 있기 때문에 타입 일관성 및 안정성이 높다.
    • 컴파일 시 타입을 지정함으로 런타임 오류를 줄일 수 있다.
  • 정적 타입의 단점
    • 코드 작성 시 변수 타입을 명시적으로 선언해주어야 하는 번거로움이 있을 수 있다.
    • 명시적인 타입 선언으로 인해 변수 타입의 유연성이 제한될 수 있다.

 

위와 같이 동적 타입, 정적 타입 언어의 장단점이 존재하는데 Kotlin을 통해 코드 작성을 하면서 타입을 명시적으로 선언하지 않았던 코드도 존재한다. Kotlin의 변수 타입을 지정하는 방식의 특징에 대해서도 알아보자.

 

Kotlin 타입 지정 특징

Kotlin은 컴파일 시 데이터 타입을 지정한 후 런타임 시에는 데이터 타입이 변동되지 않는 정적 타입 언어에 해당한다 

JVM 을 통한 컴파일이기 때문에 java와 같다.

  • Kotlin에서도 타입 추론을 제공하여 변수 타입을 명시적으로 선언하지 않아도 컴파일 과정에서 타입을 추론할 수 있는 기능을 제공한다.
  • Nullable 및 Non-Nullable 타입을 지원하여 Null 안정성 ( Null Safety )를 향상 시킨다
  • Data Class를 지원하여 객체의 상태를 표현, 비교, 복사 등의 작업을 편리하게 할 수 있다.
  • 타입 검사와 타입 캐스팅을 자동으로 처리하는 Smart Cast를 지원하기 때문에 명시적인 타입 변환 코드를 작성하지 않아도 된다.

 

 

 

 

 

 

 

 

 

 


[Reference]

 

// Kotlin 타입

https://kkangsnote.tistory.com/84

 

// 동적타입, 정적타입

https://docs.oracle.com/cd/E57471_01/bigData.100/extensions_bdd/src/cext_transform_typing.html