오늘은 코틀린에 있는 정수 타입(형식)과 실수 타입(형식)에 대해서 알아보도록 하겠습니다. 다른 언어와 비슷한 점도 있으나 다른 점 또한 존재하므로 한 번에 설명드리도록 하겠습니다. 그럼 바로 예제 코드를 보시죠. 🧊
예제 코드
예제 코드입니다.
fun main(args:Array<String>):Unit
{
val a:Byte = 125
val b:Short = (100 + 200) * 100 //30000
var c:Int = 12_4354_6538 //가시성 향상 표기법
c = 0xFF_88_88 //0x는 16진수
c = 0b01010010_01100011_01110101_01000101 //0b는 2진수 //8진법은 지원x
var d:Long = -543_7847_3984_7238_4723 //자동 Long
c = a + b //byte+short =Int //byte+byte=Int //short+short=Int
d = c + 10L //L=Long
var e:Float = 67.6f //f=Float
val f:Double = 658.456
e = (e + f).toFloat() //e는 Float 타입 이므로
println(e) //이상한데? 이건 다음 글을 참고
}
아래는 실행 결과입니다.
726.05597
Process finished with exit code 0
코드 설명
코드를 설명하기 전에 타입의 종류와 단위, 용량, 저장 가능 범위에 대해서 알아보겠습니다.
종류 | 타입 이름 | 용량 (단위: Byte) | 저장 가능한 범위 |
정수 타입 | Byte | 1 | -128~127 |
Short | 2 | -3만 2768~3만 2767 | |
Int | 4 | -21억 4748만 3648 ~ 21억 4748만 3647 |
|
Long | 8 | -992경 3372조 0368억 5477만 5808 ~ 922경 3372조 0368억 5477만 5807 |
|
실수타입 | Float | 4 | 1.410-45 ~ 3.402823510308 |
Double | 8 | 4.910-324 ~ 1.797693134862315710308 |
위 표를 참고하시면서 아래 설명을 읽어나가시면 됩니다.
3(번 라인 설명) : a라는 변수를 선언하고 타입을 Byte로 지정했습니다. 125는 Byte가 저장할 수 있는 범위 내 이므로 자동으로 Byte로 저장 가능합니다. 때문에 정상적으로 대입됩니다.
4: b라는 이름의 변수를 선언하고 Short로 형식을 설정합니다. 괄호 안의 값이 먼저 계산되므로 30000이 저장됩니다. 마찬가지로 30000또한 Short가 저장할 수 있는 범위 내이기 때문에 문제없이 저장됩니다.
5: c라는 이름의 변수 선언입니다. 이때 Int형식으로 지정을 해주었고 1243546538이라는 숫자를 저장했습니다. 여기서 언더바(_)는 가시성을 위해서 사용할 수 있는 키워드입니다. 아무 위치에나 자유롭게 개수 제한 없이 사용이 가능합니다. 숫자가 길어질 경우에 한눈에 보기가 쉽지 않은데 이를 사용하면 보기가 무척 쉬워집니다.
6: c라는 변수에 16진수 0xFF8888을 대입합니다. 마찬가지로 언더바를 사용할 수도 있습니다. 0x를 붙여주게 되면 16진수 표기인 것이죠.
7: 다음으로 마찬가지로 0b를 시작으로 한다면 2진수 표기가 되겠습니다. 코틀린은 8진수를 지원하지 않습니다. (개인적인 생각으로는 잘 사용하지 않기 때문에 빼버린 것 같습니다.)
8: 다음은 d라는 Long타입 변수입니다. 마찬가지로 Long범위 내에 있는 숫자이므로 자동으로 Long형으로 저장되는데 무리가 없습니다.
10: Int형 변수 c에 Byte변수 a 그리고 Short 변수 b를 더해 저장합니다. 이때 결과는 무조건 Int가 됩니다. byte+short 뿐만 아니라 byte+byte, short+short의 경우에도 무조건 Int로 자동 변환이 됩니다. 이점은 염두에 두시기 바랍니다.
11: Int형 변수 c에 Long 타입 10을 더하고 있습니다. Int+Long의 경우에는 무조건 결과가 Long이 됩니다. 결과가 Int의 범위보다 커질 수 있기 때문에 당연한 결과입니다.
12: 공백 라인입니다. 🍺
13: Float형 변수 e입니다. 실수 f를 해주면 Float형 실수를 나타냅니다. 실수 타입의 경우 범위라기보다는 소수점을 나타낼 수 있는 자릿수를 범위로 나타냅니다. x.xxxxx를 유효숫자와 지수만 저장한 다음에 계산하기 때문에 소수점(.) 부분이 둥둥 떠다니는 것처럼 보인다고 해서 부동 소수점(Floating Point) 방식이라고 해서 Float입니다.
14: f라는 이름의 Double형 변수입니다. Float보다 두배(double) 정밀도를 가지기 때문에 Double입니다. 658.456을 저장해주면 더블형으로 f에 저장됩니다.
15: e + f의 결과의 경우 Double형이 되지만, 현재 대입하려는 e가 Float 타입이므로 .toFloat() 메서드를 사용해서 Float로 변환 후 e에 대입해주는 모습입니다.
16: 하지만 결과의 경우 원래...
위와 같이 726.056이 나와야 하지만 실제로는 726.05597이 나온 것을 알 수 있습니다. 왜?! 궁금하시면 다음 글을 참고하시기 바랍니다. 이 글이 도움이 되셨다면 아래 공감 하트 꾸욱 부탁드립니다.
※ 본 글은 초보자를 위한 코틀린 200제를 바탕으로 공부한 내용입니다.
[Android/Kotlin] - [코틀린] 비트 연산자 7개 한 번에 이해하기 (and, or, xor, inv, shl, shr, ushr)
[Android/Kotlin] - [코틀린] 증감 연산자(++,--) 이해하는데 3초 컷
[Android/Kotlin] - [코틀린] 산술 연산자 +-*/% (Arithmetic Operator) 초간단 이해 법
내용 추가 1
- 2021-04-20 내용 추가 (예제 코드)
- unsigned 자료형 예제 코드
package chap02.section2
fun main(num07: Int, exp02: Long, ubyte: UByte ){
val num05 = 127 // Int
val num06 = -32768 // Int
val num07 = 2147483647 // Int
val num08 = 9223372036854775807 // Long
val exp01 = 123
val exp02 = 123L // Long
val exp03 = 0x0F // Int 16진수
val exp04 = 0b00001011 // Int 2진수
// 8진수는 지원하지 않음
// Byte 나 Short 자료형 사용하기
val exp08: Byte = 127 // Byte로 명시하였기 때문에 Byte 형식으로 생성됨
val exp09 = 32767 // Shot 범위를 갖고 있는 수여도 명시하지 않으면 Int로 간주
val exp10: Short = 32767 // 명시적 Short 지정하였기에 Short로 생성됨
// 2배 많은 양수 사용이 가능한 unsigned 변수 (1.3ver 실험적)
val uint: UInt = 153u
val ushort: UShort = 65535u
val ulong: ULong = 46322342uL
val ubyte: UByte = 255u
val uint2 = 153u
// val uint3: UInt = 153 // 불가능 (식별자 명시 안하면 할당 불가)
// 언더 스코어로 자릿값 구분하기
val number = 1_000_000
val cardNum = 1234_1234_1234_1234L
val hexVal = 0xAB_CD_EF_12
val bytes = 0b1101_0010
}
'Android > Kotlin' 카테고리의 다른 글
[코틀린] 문자 타입 Char 그리고 유니코드에 대한 고찰 (0) | 2020.07.19 |
---|---|
[코틀린] 실수(Float, Double) 타입을 다룰 때 주의해야 할 점 (오차) (0) | 2020.07.19 |
[코틀린] 비트 연산자 7개 한 번에 이해하기 (and, or, xor, inv, shl, shr, ushr) (0) | 2020.07.14 |
[코틀린] 증감 연산자(++,--) 이해하는데 3초컷 (0) | 2020.07.12 |
[코틀린] 산술 연산자 +-*/% (Arithmetic Operator) 초간단 이해법 (0) | 2020.07.11 |