불로구
[코틀린 기초] 3. 코틀린 자료형 본문
코틀린에서의 자료형은 참조형 자료형을 사용한다.
자바의 경우 기본타입과 참조타입으로 나뉘게 되는데 같은 방식이다.
기본형은 가공되지 않은 순수한 자료형을 말하고, 프로그래밍 언어에 내장되어 있다.
참조형은 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 것을 의미한다.
위에 자바와 같은 방식이라고 했는데
자바에서는 기본형과 참조형을 분리해서 사용하지만
코틀린에서는 자료형을 참조형만 사용한다.
대신 참조형으로 선언된 변수는 성능 최적화를 위해 컴파일러에서 다시 기본형으로 대체된다.
참조형의 종류
1. 정수자료형
- 코틀린에서 정수 자료형은 부호의 여루보 나뉜다
1) 부호가 있는 정수 자료형
- Long ( 8 Byte ) ( 64 Bit ) ( -2^63 ~ 2^63 - 2 )
- Int ( 4 Byte ) ( 32 Bit ) ( -2^31 ~ 2^31 - 1 )
- Short ( 2 Byte ) ( 16 Bit ) ( -2^15 ~ 2^15 - 1 < -32768 ~ 32767 > )
- Byte ( 8 Byte ) ( 8 Bit ) ( -2^7 ~ 2^7 - 1 < -128 ~ 127 > )
- 위에서 코틀린은 자료를 추론한다고 언급했었다. 즉, 범위에 따라서 자료형을 추론할 수 있다.
- 명시적 선언 : val a: Byte = 127 , 추론형 선언 : val a = 127
2) 부호가 없는 정수 자료형
- ULong ( 8 Byte ) ( 64 Bit ) ( 0 ~ 2^64 -1 )
- UInt ( 4 Byte ) ( 32 Bit ) ( 0 ~ 2^32 - 1 )
- UShort ( 2 Byte ) ( 16 Bit ) ( 0 ~ 2^16 - 1 < 0 ~ 65535 > )
- UByte ( 1 Byte ) (8 Bit ) ( 0 ~ 2^8 < 0 ~ 255 > )
- 부호가 없는 정수 자료형을 사용 시 값뒤에 식별자를 사용해야한다.
- val uint: UInt = 153u
- val ushort: UShort = 65535u
- val ulong: ULong = 46322340uL
- val ubyte: UByte = 255u
2. 실수 자료형
- Double ( 8 Byte ) ( 64 Bit ) ( 약 4.9E - 324 ~ 1.7E + 308 )
- Float ( 4 Byte ) ( 32 Bit ) ( 약 1.4E - 45 ~ 3.4E + 38 )
- Double과 Float 구분을 위해 Float 사용 시 값 뒤에 식별자 F를 작성한다.
- var dou = 3.14 , var flo = 3.14F
** 언더스코어 자릿값 구분 **
- 실생활에서 큰 자릿값을 쉼표로 구분하듯 코틀린에서는 언더스코어( _ )로 자릿수를 구분한다.
- 언더스코어는 값에 영향을 주지 않는다
- var number = 1_000_000_000 , var hex = 0xAB_CD_EF_10
3. 정수 자료형과 실수 자료형의 최소, 최대값 알아보기
fun main(args: Array<String>) {
println("min : " + Byte.MIN_VALUE + ", max : " + Byte.MAX_VALUE)
println("min : Short.MIN_VALUE + Short.MAX_VALUE)
println(Int.MIN_VALUE + Int.MAX_VALUE)
println(Long.MIN_VALUE + Long.MAX_VALUE)
println(Float.MIN_VALUE + Float.MAX_VALUE)
println(Double.MIN_VALUE + Double.MAX_VALUE)
}
4. 논리 자료형
- 참 / 거짓을 표현하기 위한 자료형
- Boolean ( 1 bit ) ( true , false )
- val a = true
- val b: Boolean
5. 문자열 자료형
- 자바와 비슷하다
- String은 힙영역에 String pool에 데이터가 저장되고, 스택영역에 그 데이터를 가리키는 주소를 저장한다.
- val str1: String = "hello"
- val str2 = "hello"
- val str3 = "world"
- str1 == str2 -> true / str2 == str3 -> false
- String pool을 통해 필요한 경우 메모리리 공간을 재활용한다.
- 그럼 str2를 world로, str3을 hello로 바꾸면?
fun main(args: Array<String>) {
val str1: String = "hello"
var str2 = "hello"
var str3 = "world"
println(str1==str2)
println(str1==str3)
str2 = "world"
str3 = "hello"
println(str1==str2)
println(str1==str3)
}
- 이경우 값이 바뀌고 str3가 str1이 참조하는곳과 같은 곳을 참조하기때문에 str1==str2 : false / str1==str3 : true
6. 표현식과 $ 기호 사용하여 문자열 출력
- 변수의 값이나 표현식을 문자열 안에 넣어 출력하려면 '$'를 사용한다.
fun main(args: Array<String>) {
val age: Int = 30
println("나이는 $age 입니다.")
}
- 표현식을 사용하기 위해선 중괄호{} 를 활용한다.
fun main(args: Array<String>) {
val age: Int = 20
val ageup = "${age + 10}"
println("올해 나이는 $age 입니다.")
println("10년후 나이는 $ageup 입니다.")
}
- age는 정수형 Int타입으로 20이다
- ageup은 String 타입이지만 표현식을 통해 age의 값에 + 10을 처리한 후 문자열로 저장되어 30이 되었다
- 그럼 문자열 출력에 특수문자를 사용하고 싶을땐? -> 백슬래시(\)를 사용한다.
fun main(args: Array<String>) {
println("안녕하세요 \$라는 표현 \"\"라는 표현 ")
}
- 형식화된 다중 문자열 사용
- 문자열에 줄바꿈 문자, 탭 등의 특수문자가 포함된 문자열 표현 방법
fun main(args: Array<String>) {
val age: Int = 25
val name = "홍길동"
val info = """
그의 이름은 $name 이며,
그의 나이는 $age 이다.
의적이다.
"""
println(info)
}
//출력
그의 이름은 홍길동 이며,
그의 나이는 25 이다.
의적이다.
7. 자료형에 별명 붙이기
- 자료형에는 별명을 붙일 수 있으면 typealias라는 키워드를 사용한다.
'프로그래밍 > 코틀린' 카테고리의 다른 글
[코틀린 기초]6. 자료형 (2) (0) | 2021.02.14 |
---|---|
[코틀린 기초] 5. 자료형 비교 & 변환 (0) | 2021.02.09 |
[코틀린 기초] 4. 코틀린 NULL (0) | 2021.02.09 |
[코틀린 기초] 2. 코틀린 변수 (0) | 2021.02.08 |
[코틀린 기초] 1. 코틀린 패키지 (0) | 2021.02.08 |