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
'TIL' 카테고리의 다른 글
[TIL] Kotlin Naver Map API (2) | 2023.11.01 |
---|---|
[TIL] Kotlin Firestore, Storage [ 5 ] 게시글 수정한 내용 적용해주기, 단일 LiveData (3) | 2023.10.31 |
[TIL] Kotlin Firestore, Storage [ 4 ] 게시글 이미지 여러장, 글 수정하기 (2) | 2023.10.30 |
[TIL] Kotlin Firestore, Storage [ 3 ] 게시글 디테일 페이지로 이동하기, 수정하기 ( 좋아요 기능 ) (2) | 2023.10.29 |
[TIL] Kotlin Storage를 Adapter의 내부에서 호출 시 문제 (1) | 2023.10.28 |