일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드 설정
- 자료형
- toyproject
- 프로젝트
- 기초설정
- Kotlin
- springboot
- controller
- service
- 도커
- Security
- 코틀린
- axios
- 스프링부트
- 네티 클라이언트
- MySQL
- Java
- Repository
- Spring
- 팀프로젝트
- Spring Boot
- 채팅
- 네티 서버
- 배열
- 클래스
- react
- netty
- JWT
- recoil
- 자바
- Today
- Total
hyuko
코틀린 기본 타입 본문
모든 언어는 숫자와 문자 같은 기본 타입을 나타내는 편리한 수단을 제공한다.
모든 언어에는 내장된 타입과 리터럴이 존재한다.
코틀린에서 대표적으로 아래와 같다
Int, Boolean, String
리터럴은 인스턴스를 만드는 데 사용되는 내장 표기법.
숫자는 그 자체로 정수 리터럴이며 “” (큰 따옴표)로 감싸진 글자들은 문자열 리터럴이다.
우리는 아래에 대해 배울 것이다
- 수(Int, Long, Double, Float, Short, Byte)
- 불(Boolean)
- 문자(char)
- 문자열(String)
특이한 점으로 코틀린에서는 배열도 원시 타입으로 여겨진다. 이 것은 나중에 18장에서 배우겠다.
사실은 코틀린에서는 모든 값이 객체로 인식되기 때문에 원시타입이 없다 모든 값들은 메서드를 제공한다.
수
크게 소수점이 있는 부동소수점 수 타입과 없는 정수 타입으로 나눈다.
정수 표현을 할 때는 Int, Long, Byte, Short를 사용
부동 소수점 수를 표현할 때는 Float와 Double을 사용
기본 타입으로는 정수는 Int, 부동 소수점 수는 Double이다.
숫자의 끝에 L을 붙이면 자동으로 Long으로 타입을 구성하고 F나 f를 붙이면 Float 형태로 변환한다.
Byte 나 Short는 따로 없고 변수를 선언할 때 타입을 명시하는 것으로 나타낸다
fun main() {
val b: Byte = 123
val s: Short = 345
val l: Long = 345
}
자바처럼 암묵적인 타입변환을 지원하지 않는다.
예를 들면 Int 가 있어야 할 곳에 Byte나 Long을 사용할 수 없다
fun main() {
val b: Byte = 123
val l: Long = 123L
// 불가능
val i1: Int = b
val i2: Int = l
}
- 변환을 하려면 메소드를 사용한다.
fun main() {
val b: Byte = 123
val l: Long = 123L
val i: Int = 123
// 불가능
val i1: Int = b.toInt()
val i2: Int = l.toInt()
val l1: Long = b.toLong()
val l2: Long = i.toLong()
}
진수 표현
수를 16진수로 표현하려면 0x로 시작하면 된다. 이진수는 0b로 시작한다. 아쉽게도 8진수는 지원하지 않는다.
fun main() {
val hexBytes = 0xA4_D6_FE_FE
println(hexBytes) // 2765553406
val bytes = 0b1010010_01101101_11101000_10010010
println(bytes) // 1382934674
}
Number와 변환함수
숫자를 나타내는 모든 기본 타입은 Number 타입이다.
fun main() {
val i: Int = 123
val b: Byte = 123
val l: Long = 123L
val n1: Number = i
val n2: Number = b
val n3: Number = l
}
- 분명 아까 저런식으로 암묵적인 형변환 안된다고 했는데?
- Number 클래스를 들어가보면 해당 값을 기본 타입으로 변환해 주는 변환함수들이 정의되어 있다.
- 그래서 보통 to로 시작하고 뒤에 타입이 있는 함수들을 변환함수(conversion function)이라고 한다.
수 연산
코틀린에서는 기본적인 수학 연산 지원을 한다.
- 덧셈
- 뺄셈
- 곱셈
- 나눗셈
fun main() {
val i1 = 12
val i2 = 34
println(i1 + i2) // 46
println(i1 - i2) // -22
println(i1 * i2) // 408
println(i1 / i2) // 0
val d1 = 1.4
val d2 = 2.5
println(d1 + d2) // 3.9
println(d1 - d2) // -1.1
println(d1 * d2) // 3.5
println(d1 / d2) // 0.5999999999999
}
- 여기서 소숫점 나눗셈인 d1 / d2의 원래 값은 0.56입니다만 오차가 생긴 이유는 조금 뒤에 설명한다.
비트 연산
- and: 두 숫자를 비트 단위로 비교하여, 같은 위치의 비트가 둘 다 1일 때만 1을 유지
- or : 두 숫자에서 같은 위치의 비트 중 하나라도 1일 때만 1일 유지한다.
- xor : 두 숫자에서 같은 위치의 비트 중 단 하나만 1일 때만 1을 유지한다.
- shl : 연산자 좌변의 값을 우변의 값(비트 수)만큼 왼쪽으로 시프트 한다.
- shr : 연산자 좌변의 값을 우변의 값(비트 수)만큼 오른쪽으로 시프트 한다.
fun main() {
println(0b0101 and 0b0001) // 0b0001이므로 1
println(0b0101 or 0b0001) // 0b0101이므로 5
println(0b0101 xor 0b0001) // 0b0100이므로 4
println(0b0101 shl 1) // 0b1010이므로 10
println(0b0101 shr 1) // 0b0010이므로 2
}
BigDecimal과 BigInteger
코틀린의 기본타입은 표현할 수 있는 크기와 정확도에 한계가 있다.
다음과 같은 특정 상황에서는 정확하지 않거나 잘못된 결과를 얻을 수 있다.
fun main() {
println(0.1 + 0.2) // 0.30000000000004
println(214783647 + 1) // - 214783648
}
- 이런 경우 정확한 계산을 위해 BigDecimal과 BigInteger를 쓴다. 변환 함수 또는 팩토리함수 등이 존재한다.
불
true와 false 두 가지 값만 가능한 Boolean 도 기본 타입으로 제공
다음과 같은 질문에 ‘예 / 아니요’로 답할 때 사용된다
- 사용자가 어드민 유저인가요?
- 사용자가 쿠키 정책을 허용했나요?
- 두 수가 동일한가요?
그리고 비교 연산의 결과로 자주 쓰인다.
동등성
Boolean은 동등 비교의 결과로 자주 쓰인다.
숫자를 비롯해 비교 가능한(즉, Comparable 인터페이스를 구현한) 모든 객체는 비교 가능하다.
불 연산
세 가지의 논리 연산자를 제공한다.
- 논리곱(and) 연산자 &&: 양 쪽 모두 true 일 때 true를 반환
- 논리합(or) 연산자 || : 둘 중 하나 이상이 true일 때 true를 반환
- 부정(not) 연산자!: true를 false로 false를 true로 변경한다.
문자
- 하나의 문자를 나타내려면 Char 타입을 사용 문자는 작은따옴표(’’)를 사용한다.
fun main() {
println('A')
println('Z')
}
각 문자는 유니코드 숫자로 표현된다. 문자를 유니코드로 표현할 수 도 있다.
표현 방법은 자바와 같다. 즉, \\u로 시작하며 이어서 16진수로 기록하면 된다.
fun main() {
println('\\u00A3') // E
}
문자열
문자열은 이름 그대로 ‘일련의 문자들’을 뜻한다.
코틀린에서는 큰 따옴표” 또는 삼중 따옴표””” 를 사용해서 문자열을 만든다.
fun main() {
val text1 = "ABC"
println(text1)
val text2 = """DEF"""
println(text2)
}
- 큰 따옴표 하나로 감싼 문자열은 기본적으로 한 줄 문자열이며 여러 줄로 쓸 경우 개행 문자인 \\n를 사용해야 한다.
- 하지만 삼중 따옴표를 쓰게 되면 여러 줄의 텍스트를 그대로 사용가능하다.
이스케이프 시퀀스 의미
\t | 탭 |
\b | 백스페이스 |
\r | 캐리지 리턴 |
\f | 폼 피드 |
\n | 개행 |
\’ | 작은 따옴표 |
\” | 큰 따옴표 |
\\ | 역 슬래시 |
\$ | 달러 |
요약
코틀린의 기본 타입과 리터럴에는 Int, Boolean, String 등이 있으며, 모든 값은 객체로 인식되어 메서드를 제공합니다. 수 타입은 정수(Int, Long, Byte, Short)와 부동소수점(Float, Double)으로 나뉘며, 암묵적 타입 변환을 지원하지 않아 명시적 변환 함수가 필요합니다. 수학 연산과 비트 연산을 지원하며, 정확한 계산을 위해 BigDecimal과 BigInteger를 사용할 수 있습니다. 불(Boolean)은 true와 false 값을 가지며, 논리 연산자를 제공합니다. 문자는 Char 타입으로 작은따옴표로 표현되고, 문자열은 큰 따옴표 또는 삼중 따옴표로 표현됩니다.