티스토리 뷰

Server

Kotlin 변수의 Wrapper Type

니용 2020. 6. 25. 13:57
반응형

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로 변환했을 때는 이렇게 주로 사용했었지요.

 

Java Style

Kotlin에서는 아래와 같이 사용할 수 있습니다.

 

Kotlin Style

 

Java에서 숫자형이었던 char는 Kotlin에서 숫자형이 아닌 문자입니다. 보통 많이 사용하는 편은 아니지만 알아두시면 좋을 거 같네요!

위의 intChar는 에러가 나요

 

그 외에 자릿수 사용법 등은 깃허브 링크에 등록해두었으니 확인해보시면 좋을 듯합니다.

자리수 구분

 


Declaration

Kotlin에서 변수를 선언하는 방법은 2가지가 있습니다.

선언 특징 in Java in JavaScript
var(변수) 선언 후 재정의 가능 Object var, let
val(상수) 선언에 초기화 선택적 필요, 재정의 불가능 final Object const

(변수 또는 상수를 선언하는 Hoisting의 개념이 궁금하시면 이 글을 클릭해주세요)

 

var는 재정의가 가능하지만 val은 불가능해요

선언하는 방식은 위에서도 보셨다시피 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
댓글
공지사항