본문 바로가기
  • AI 개발자가 될래요
안드로이드

[코틀린] Kotlin의 정수, 실수 자료형, 자료형 추론법

by 꿀개 2023. 3. 20.

Kotlin의 정수, 실수 자료형

정수 자료형

정수 자료형은 양수, 음수, 0을 나타낸다. 코틀린의 정수 자료형은 부호가 있는 것과 부호가 없는 것으로 나눌 수 있다. 다음은 부호가 있는 정수 자료형을 정리한 표이다. 값의 범위에 따라 알맞은 정수 자료형을 사용하면 된다.

 

부호가 있는 정수 자료형

정수 자료형 Long 8바이트(64비트) -2^63 ~ 2^63-1
Int 4바이트(32비트) -2^31 ~ 2^31-1
Short 2바이트(16비트) -2^15 ~ 2^15-1 (-32,768 ~ 32,767)
Byte 1바이트(8비트) -2^7 ~ 2^7-1 (-128 ~ 127)

 

정수를 표현할 때 숫자를 그냥 사용하면 10진수를 나타내지만, 접미사나 접두사를 사용하면 다음과 같이 2진수나 16진수로도 표현이 가능하다.

val exp01 = 123     // Int형으로 추론
val exp02 = 123L    // 접미사 L을 사용해 Long형으로 추론
val exp03 = 0x0F    // 접두사 0x를 사용해 16진 표기가 사용된 Int형으로 추론
val exp04 = 0b00001011 // 접두사 0b를 사용해 2진 표기가 사용된 Int형으로 추론

 

보통 숫자값은 Int로 추론되기 때문에 만약 더 작은 범위의 정수 자료형인 Byte나 Short를 사용하기 위해서는 직접 자료형을 명시해야 한다.

val exp08: Byte = 127 // 명시적으로 자료형을 지정(Byte)
val exp09 = 32767 // 명시적으로 자료형을 지정하지 않으면 Short형 범위의 값도 Int형으로 추론
val exp10: Short = 32767 // 명시적으로 자료형을 지정(Short)

 

부호가 없는(Unsigned) 정수 자료형

부호 없는
정수형
ULong 8Bytes(64Bits) 0 - 2^64- 1
UInt 4Bytes(32Bits) 0 - 2^32-1
UShort 2Bytes(16Bits) 0 - 2^16(0 - 65535)
UByte 1Bytes(8Bits) 0 - 2^8(0 - 255)

 

부호가 없는 자료형을 사용할 때는 다음과 같이 식별자를 사용해 할당할 수 있다.

val uint: UInt = 153u
val ushort: UShort = 65535u
val ulong: ULong = 46322342uL
val ubyte: UByte = 255u

 

실수 자료형

실수형 Double 8바이트(64비트) 약 4.9E-324 - 1.7E+308(IEEE754)
Float 4바이트(32비트) 약 1.4E-45 - 3.4E+38(IEEE754)

 

실수도 자료형을 명시하지 않으면 Double 형으로 간주된다. 만약 Float 형으로 지정하고 싶다면 식별자 f 를 실수 옆에 붙여도 된다.

val exp01 = 3.14  // Double형으로 추론(기본)
val exp02 = 3.14F // 식별자 F에 의해 Float형으로 추론

 

부동 소수점

유한한 메모리 공간에 실수를 저장하기 위해 부동 소수점(floating-point) 방식을 사용한다. 

부동 소수점 방식이란? 실수를 가수, 지수로 나누어 표현하는 방식이다.

 

일반 수학의 표현과 소스코드상의 표현법

 

위 그림은 일반 수학과 컴퓨터에서 부동 소수점을 표현하는 방식을 나타낸 것이다. 3.14에서 왼쪽으로 소수점을 2칸 이동하려면 e-2나 E-2를, 오른쪽으로 소수점을 2칸 이동하려면 e2나 E2를 붙이면 된다. 다음은 부동 소수점 방식으로 실수를 표현한 것이다.

val exp03 = 3.14E-2 // 왼쪽으로 소수점 2칸 이동, 0.0314
val exp04 = 3.14e2  //  오른쪽으로 소수점 2칸 이동, 314

 

Kotlin의 자료형 추론 법

다음은 자료형을 지정하지 않은 변수에 여러 정수를 대입한 것이다.

Ctrl + Shift + P 를 누르면 추론된 자료형을 볼 수 있다.

val num05 = 127 // Int형으로 추론
val num06 = -32768 // Int형으로 추론
val num07 = 2147483647 // Int형으로 추론
val num08 = 9223372036854775807 // Long형으로 추론

 

 

 

참고 : https://acaroom.net/ko/blog/youngdeok/%EC%97%B0%EC%9E%AC-%EC%BD%94%ED%8B%80%EB%A6%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B3%80%EC%88%98%EC%99%80-%EC%9E%90%EB%A3%8C%ED%98%95