Table of Contents
코틀린 독학 하기 4
기본 타입
정수타입
이름 | 크기(바이트 | 범위 | 대응하는 자바 타입 |
Byte | 1 | -128 …127 | Byte |
short | 2 | -32768 … 32767 | Short |
Int | 4 | -231 …. 231-1 | Int |
Long | 8 | -263…… 263-1 | Long |
어떤 정수 타입 값을 표현하는 가장 간단한 리터럴은 10진수다
val n = 1234
1234가 리터럴이다
리터럴에 _를 넣어서 가독성을 높일 수 잇다.
val n = 34_123_345
리터럴에 L이나 l을 접두사로 붙이면 Long 타입이 된다
val hundredLong = 100L
앞에 0b(2진수)나 0x(16진수)를 붙여서 2진수나 16진수로 수 리터럴을 작성할 수도 있다.
val bin = 0b10101 //21
val hex = 0xF9 // 249
수 리터럴의 경우 0을 표현하는 경우가 아니라면 맨 앞에 0이 올 수 없다.
val zero = 0 //된다
val zeroOne = 01 // 안된다 . 에러
-10과 같은 음수는 기술적으로는 리터럴이 아니다. 음수는 단항 음수 연산자(-)를 리터럴에 적용한 식이다.
val neg = -10
val negHex = -0xFF
각 정수 타입에는 최솟값(MIN_VALUE)과 최댓값(MAX_VALUE)을 포함하는 상수 정의가 들어있다. 이런 상수를 사용하려면 앞에 타입 이름을 붙여야 한다
short.MIN_VALUE
short가 타입이름
부동소수점 수
10진 소수 형태
val pi = 3.14
정수 부분이 비어있는 경우 정수 부분은 0으로 간주한다. 하지만 소수점을 남기면서 소수부분을 생략할 수는 없다
.25는 가능하지만 1. 은 에러가 난다.
코틀린은 과학적 표기법 리터럴을 허용한다. e나 E뒤에 10을 몇 번 거듭제곱하는지를 알려주는 숫자가 온다.
val pi = 0.314E1 // 3.14 = 0.314*10
E뒤에 1이 있으면 이는 10을 한번 곱하라는 것이다. 만약 3이 오면 10을 3번 거듭곱한다. 즉 1000을 곱하게 된다
디폴트로 부동소수점 리터럴은 Double타입이다. f나 F를 리터럴 뒤에 붙이면 Float 타입이 된다.(f나 F를 붙이는 경우 소수점을 포함한 소수 부분을 생략할 수 있다)
val pi= 3.14f
val one = 1f
Float 리터럴이 double 타입으로 자동 변환되지 않는다.
val pi : Double = 3.14f // 에러
Float와 Double도 각 타입의 특별한 값을 표현하는 몇 가지 상수를 제공한다.
MIN_VALUE, MAX_VALUE : 각 타입에서 표현할 수 있는 가장 작은 유한값과 가장 큰 유한값
NEGATIVE_INFINITY, PISITIVE_INFINITY : 음의 무한대와 양의 무한대, 각 타입이 표현할 수 있는 가장 작은 값과 가장 큰 값
NAN: 0/0의 결과처럼 숫자가 아닌 값을 의미
산술연산
덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 를 사용한다
5+2 = 7
5-2 = 3
5*2 = 10
5/2 = 2
5%2 = 1
메서드
floorDiv() : 나눗셈 (/) 와 마찬가지
mod() : 정수 나머지(%) 와 마찬가지
각 이항 산술 연산마다 모든 가능한 수 타입간의 연산을 지원하기 위한 변종이 함께 제공된다. double + int 가 가능하다는 것이다. 그러므로 타입이 여섯가지이므로 각 연산마다 6*6 = 36가지 버전이 있다. 이러한 산술 연산의 결과는 인자 중 더 큰 의미를 지니는 타입이 된다.
Double > Float > Long > Int > Short >Byte
대부분의 타입에서는 이는 해당 타입이 표현할 수 있는 값의 범위가 더 넓다는 뜻이다. 하지만 항상 그렇지는 않다. 분명한 예로 Long 에서 Float으로 변환되는 경우다. 이 경우 일부 유효 자리 숫자를 잃고 정밀도precision가 떨어지게 된다
int + byte // 2:Int
int + long // 2 : Long
long + Double // 2.5 : Double
float + double // 3.0 : Double
float + int // 2.5 : Float
long + double // 2.5 : Double
- long:
- 64비트 크기를 가지며, 부호 있는 정수를 표현합니다.
- 범위:
-9,223,372,036,854,775,808
에서9,223,372,036,854,775,807
까지입니다. - 최소값:
Long.MIN_VALUE
또는-9,223,372,036,854,775,808
- 최대값:
Long.MAX_VALUE
또는9,223,372,036,854,775,807
- float:
- 32비트 크기를 가지며, IEEE 754 부동 소수점 표현 방식을 사용합니다.
- 범위: 대략적으로
1.4E-45
에서3.4E38
까지입니다. - 최소값:
Float.MIN_VALUE
또는 대략적으로1.4E-45
- 최대값:
Float.MAX_VALUE
또는 대략적으로3.4E38
주의할 점은 float
은 부동 소수점의 한계로 인해 정밀도 손실이 발생할 수 있습니다. 특히 큰 값 또는 작은 값에서는 정확한 표현이 어려울 수 있습니다. 만약 정밀도가 중요한 경우라면 double
을 고려하는 것이 좋습니다.