티스토리 뷰
Author: 니용
이전 글에서 설치 & 프로젝트 생성까지 완료하였습니다.
이번에는 Kotlin에서 제공하는 변수 타입에 대해 말씀드리겠습니다.
Wrapper Type
기본적으로 Kotlin은 Java의 primitive type + String type을 기본적으로 처리하는 타입이 따로 존재합니다. 이를 Wrapper Type(래퍼 타입)이라고 하고 기존의 Primitive Type을 감싸주어 더 많은 기능을 제공하기에 이와 같이 씁니다.
아래 표에서 비교해보겠습니다.
Java Primitive Type | Kotlin Type | Nullable | bit | Byte | Function |
byte | Byte | true | 8 | 1 | toByte() |
short | Short | true | 16 | 2 | toShort() |
int | Int | true | 32 | 4 | toInt() |
float | Float | true | 32 | 4 | toFloat() |
long | Long | true | 64 | 8 | toLong() |
double | Double | true | 64 | 8 | toDouble() |
boolean | Boolean | true | 1 | 0 | |
char | Char | true | 16 | 2 | toChar() |
보시다시피 자바에서의 숫자형과 같은 크기를 가지고, 자바의 숫자형과 비슷하게 처리합니다.
기존에 Java에서 primitive type에는 null을 할당해주지 못했습니다. 하지만 Kotlin에서는 모든 타입이 Nullable 합니다.
다른 부분은 모두 다른 타입으로 캐스팅할 수 있도록 기본적인 함수를 제공해주고 있습니다.
Java에서 Long to Integer로 변환했을 때는 이렇게 주로 사용했었지요.
Kotlin에서는 아래와 같이 사용할 수 있습니다.
Java에서 숫자형이었던 char는 Kotlin에서 숫자형이 아닌 문자입니다. 보통 많이 사용하는 편은 아니지만 알아두시면 좋을 거 같네요!
그 외에 자릿수 사용법 등은 깃허브 링크에 등록해두었으니 확인해보시면 좋을 듯합니다.
Declaration
Kotlin에서 변수를 선언하는 방법은 2가지가 있습니다.
선언 | 특징 | in Java | in JavaScript |
var(변수) | 선언 후 재정의 가능 | Object | var, let |
val(상수) | 선언에 초기화 선택적 필요, 재정의 불가능 | final Object | const |
(변수 또는 상수를 선언하는 Hoisting의 개념이 궁금하시면 이 글을 클릭해주세요)
선언하는 방식은 위에서도 보셨다시피 var(또는 val) (변수명) : (타입) = (초기화 값)입니다.
Primitive Type Extension
기본적으로 제공하는 타입에서 함수를 제공합니다. 파일명은 Primitives.kt이고 이 내부에는 대략 1,400라인의 코드가 있는 만큼 많은 함수를 제공합니다.
대표적으로 Int가 있는데 전부 설명하기는 무리가 있어, Kotlin 공식 홈페이지 링크를 따로 공유드리겠습니다.
가장 많이 쓰는 함수를 아래에 나열에 보았습니다.
Function | Return Type | Description | Example |
compareTo(other: Number) | Int | 값을 비교하여 1,0,-1 리턴 | Int(1).compareTo(200) == -1 |
plus(other: Number) | Number | 숫자를 더함 | Int(1).plus(4) == 5 |
minus(other: Number) | Number | 숫자를 뺌 | Int(1).minus(3) == -2 |
times(other: Number) | Number | 숫자를 곱함 | Int(3).times(4) == 12 |
div(other: Number) | Number | 숫자를 나눔 | Int(16).div(3) == 5 |
mod(other: Number) rem(other: Number) |
Number | 숫자를 나눈 나머지 | Int(17).div(4) == 1 |
inc(), dec() | Int | 숫자++, 숫자-- | Int(3).inc() == 4 |
unaryPlus(), unaryMinus() | Int | 절대값 양수, 음수 | Int(7).unaryMinus() == -7 |
rangeTo(other: Int, Long): | IntRange, LongRange | 해당 범위 내의 값 생성 | Int(1).rangeTo(40) == 33 |
shl(bitCount: Int) | Long | 왼쪽 쉬프트 연산 | Int(16).shl(1) == 32 |
shr(bitCount: Int) | Long | 오른쪽 쉬프트 연산(양수) | Int(16).shr(2) == 4 |
ushr(bitCount: Int) | Long | 오른쪽 쉬프트 연산(정수범위) | Int(16).ushr(3) == 2 |
and(other: Long) | Long | AND 연산 | Int(15).and(10) == 10 |
or(other: Long) | Long | OR 연산 | Int(13).or(4) == 13 |
xor(other: Long) | Long | XOR 연산 | Int(10).xor(5) == 15 |
Number Type
Kotlin에서 위의 숫자들을 대표하는 클래스가 하나 있는데 바로 Number Class입니다.
Number 클래스는 추상 클래스이어서 Java의 primitive type에 직접 접근할 수 없습니다. Number 클래스 내부에서 제공하는 함수를 사용하여 접근해야 하죠.
String Type
Java에 비해서 Kotlin에서 대표적으로 향상된 것이 바로 String Type입니다.
대표적으로 향상된 부분입니다.
내용 | 예시 | 반환 |
String 클래스 내의 함수 지원 | .substring() / .startWith() | String |
기본적인 타입 변환 함수 | .toLong() / .toInt() | Long, Int |
Stream 함수 내 Lambda 표현식 지원 | .map{}, .reduce{} | Char |
정규표현식 지원 | .toRegex() | Regex |
문자열 리터럴 | 아래 그림 | String |
Java 가장 차이가 많이 나는 부분은 1번을 제외하고 다른 부분인데요, 이 부분은 양이 상당히 많아 차후에 다시 리뷰해보도록 하겠습니다.
'Server' 카테고리의 다른 글
Kotlin의 Control Flow (0) | 2020.06.26 |
---|---|
Kotlin의 함수(Function) (0) | 2020.06.26 |
[Spring] @Bean과 @Component의 차이 (0) | 2020.06.25 |
Kotlin 설치법 (0) | 2020.06.24 |
Kotlin이 뭐에요? (1) | 2020.06.22 |
이모지를 저장하자 (0) | 2020.06.16 |