Kotlin의 숫자 타입과 연산 가이드
Kotlin에서 숫자를 다루는 방법과 관련된 다양한 개념을 살펴봅니다.
정수 타입 (Integer types)
Kotlin은 숫자를 표현하기 위한 내장 타입 세트를 제공합니다. 정수의 경우, 크기와 값 범위가 다른 네 가지 타입이 있습니다:
타입 | 크기 (비트) | 최솟값 | 최댓값 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2,147,483,648 | 2,147,483,647 |
Long | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
명시적 타입 지정 없이 변수를 초기화할 때, 컴파일러는 Int부터 시작하여 값을 표현하기에 충분한 가장 작은 범위의 타입을 자동으로 추론합니다. Long 값을 명시적으로 지정하려면 값 뒤에 L 접미사를 붙입니다.
val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1
부동 소수점 타입 (Floating-point types)
실수를 위해 Kotlin은 IEEE 754 표준을 따르는 Float와 Double 타입을 제공합니다:
타입 | 크기 (비트) | 유효 비트 | 지수 비트 | 십진 자릿수 |
---|---|---|---|---|
Float | 32 | 24 | 8 | 6-7 |
Double | 64 | 53 | 11 | 15-16 |
소수부가 있는 숫자로 Double과 Float 변수를 초기화할 수 있습니다:
val pi = 3.14 // Double
val oneDouble = 1.0 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, 실제 값은 2.7182817
Kotlin에서는 다른 언어와 달리 숫자에 대한 암시적 확장 변환이 없습니다.
숫자 리터럴 상수 (Literal constants for numbers)
정수 값을 위한 리터럴 상수의 종류:
- 10진수:
123
- Long 타입:
123L
- 16진수:
0x0F
- 2진수:
0b00001011
부동 소수점 숫자를 위한 표기법:
- 기본적으로 Double:
123.5
,123.5e10
- Float는 f 또는 F로 표시:
123.5f
가독성을 위해 밑줄을 사용할 수 있습니다:
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
JVM에서의 숫자 표현 (Numbers representation on the JVM)
JVM 플랫폼에서 숫자는 기본적으로 프리미티브 타입으로 저장되지만, 널이 가능한 숫자 참조나 제네릭을 사용할 때는 박싱됩니다.
val a: Int = 100
val boxedA: Int? = a
val anotherBoxedA: Int? = a
val b: Int = 10000
val boxedB: Int? = b
val anotherBoxedB: Int? = b
println(boxedA === anotherBoxedA) // true
println(boxedB === anotherBoxedB) // false
명시적 숫자 변환 (Explicit number conversions)
작은 타입은 큰 타입의 하위 타입이 아니므로, 명시적 변환이 필요합니다:
val b: Byte = 1
val i1: Int = b.toInt()
모든 숫자 타입은 다른 타입으로의 변환을 지원합니다: toByte()
, toShort()
, toInt()
, toLong()
, toFloat()
, toDouble()
숫자 연산 (Operations on numbers)
Kotlin은 표준 산술 연산을 지원합니다: +
, -
, *
, /
, %
정수 나눗셈의 결과는 항상 정수입니다:
val x = 5 / 2
println(x == 2) // true
부동 소수점 결과를 얻으려면 피연산자 중 하나를 명시적으로 변환해야 합니다:
val x = 5 / 2.toDouble()
println(x == 2.5) // true
비트 연산 (Bitwise operations)
Kotlin은 정수에 대한 비트 연산을 제공합니다:
val x = (1 shl 2) and 0x000FF000
비트 연산 목록: shl
, shr
, ushr
, and
, or
, xor
, inv
부동 소수점 숫자 비교 (Floating-point numbers comparison)
부동 소수점 숫자의 비교는 IEEE 754 표준을 따르지만, Any
, Comparable<...>
, Collection<T>
등의 타입에 대해서는 다르게 동작합니다:
println(Double.NaN == Double.NaN) // false
println(listOf(Double.NaN) == listOf(Double.NaN)) // true
println(0.0 == -0.0) // true
println(listOf(0.0) == listOf(-0.0)) // false
println(listOf(Double.NaN, Double.POSITIVE_INFINITY, 0.0, -0.0).sorted())
// [-0.0, 0.0, Infinity, NaN]
이 가이드를 통해 Kotlin에서 숫자를 다루는 다양한 방법과 주의사항을 이해할 수 있습니다.
효율적이고 안전한 코드 작성에 도움이 될 것입니다.
이 블로그의 다른글 :
2024.08.10 - [개발&프로그래밍] - [kotlin] 코딩 컨벤션 - lambdas, Trailing commas
[kotlin] 코딩 컨벤션 - lambdas, Trailing commas
Kotlin 코딩 컨벤션 가이드Kotlin을 사용하여 더 깔끔하고 일관된 코드를 작성하기 위한 고급 코딩 컨벤션을 소개합니다.아래글은 공식 홈페이지를 참고하였습니다.https://kotlinlang.org/docs/coding-convent
observerlife.tistory.com
2024.08.09 - [개발&프로그래밍] - [kotlin] 코딩 컨벤션 (coding conventions)
[kotlin] 코딩 컨벤션 (coding conventions)
Kotlin 코딩 컨벤션 가이드 Kotlin 프로그래밍 언어를 사용할 때 따라야 할 코딩 컨벤션에 대한 종합적인 가이드입니다.이 가이드라인을 따르면 코드의 일관성과 가독성을 높일 수 있습니다. 이
observerlife.tistory.com
2024.08.09 - [개발&프로그래밍] - [kotlin] 자주 사용되는 관용구(idiom) 모음
[kotlin] 자주 사용되는 관용구(idiom) 모음
이 글은 Kotlin 프로그래밍 언어에서 자주 사용되는 관용구(idiom)들의 모음입니다.각 관용구에 대한 설명과 예제 코드를 함께 설명합니다.공식 홈페이지 kotlinlang.org의 내용을 참고합
observerlife.tistory.com
2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 8가지 핵심 문법
[kotlin] 입문시 알아야 할 8가지 핵심 문법
Kotlin의 주요 문법 특징들을 간략히 정리한 것입니다.각 항목은 Kotlin의 간결하고 표현력 있는 코드 작성을 지원하는 특징들을 보여줍니다. 아래 문서는 kotlinlang.org 공식 홈페이지를 참조합니다.
observerlife.tistory.com
2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 7가지 핵심 문법
[kotlin] 입문시 알아야 할 7가지 핵심 문법
Kotlin의 기본적인 문법 요소들을 간략하게 설명하고 있습니다.각 항목은 Kotlin 프로그래밍의 기초를 이해하는 데 중요한 개념들을 포함하고 있습니다. 아래 문서는 kotlinlang.org 공식 홈페이지를
observerlife.tistory.com
'개발&프로그래밍' 카테고리의 다른 글
[Kotlin] 조건문과 반복문 (0) | 2024.08.11 |
---|---|
[kotlin] 타입 체크와 캐스팅 (0) | 2024.08.11 |
[kotlin] 코딩 컨벤션 - lambdas, Trailing commas (0) | 2024.08.10 |
[kotlin] 코딩 컨벤션 (coding conventions) (0) | 2024.08.09 |
[kotlin] 자주 사용되는 관용구(idiom) 모음 (0) | 2024.08.09 |
댓글