Int : 정수 예) 1
string : 문자열, 배열의 한 종류 예) "hello123"
Float : 실수형, 소수점 이하의 수를 가짐. double 등 다양하게 가짐 예) 1.2
→ 소문자로 쓰면 에러 난다...
val(value) : 불변형, 값을 선언하고 초기화하면 이후에 값 변경 불가
var(variable) : 가변형, 선언하고 초기화해도 값 변경 가능
val/var(선언키워드) username(변수이름): String(자료형) = "값" 의 형태
val username: String = "ssook"
fun main(){
val username: String = "ssook"
//username = "sook" → val은 불변형 변수 키워드이므로 username은 불변형
println("username: $username");
}
fun main(){
var username: String = "ssook"
username = "sook"
println("username: $username");
}
fun main(){
var username = "ssook"
var count1: Int = 3
var count2 =3
println("username = ${username}, count1=$count1, count2= $count2")
}
위 사진에서 보면 알 수 있듯, 코틀린은 컴파일러가 자료형을 알 수 있는 경우 자료형을 삭제해도 값에 따라 이를 추론해 선언하기 때문에 생략 가능함.
var username
자료형을 지정하지 않았기 때문에, 컴파일러가 자료형 추론 불가 → 사용 불가
val init: Int
사용 전 혹은 생성자 시점에서 init 변수를 초기화 함. 따라서 해당 경우에는 사용 가능
변수를 사용하기 위해서는 자료형을 넣거나 값 초기화를 해줘야 함.
● 기본형
● 참조형
성능은 기본형이 더 좋음. 참조형은 한 번 참조해서 쓰기에 성능이 느려짐.
그러나 기본형을 쓰면 코드가 복잡해지므로 코틀린 참조형을 사용하도록 함.
● 음수가 사용되는 부호 있는 정수 자료형
Long, Int, Short, Byte
● 부호 없는 정수형 (1.3 버전에서 실험적으로 사용)
ULong, UInt, Ushort, Ubyte
: 양수만 가능. 음수 표현 불가능
● IEEE 방식의 부동 소수점 제한
package chap02.section2
fun main(){
var num: Double = 0.1
for(x in 0..999){
num += 0.1
}
println(num) //100.09999999999859
}
0.1을 1000번 더하면 100이 나와야 하나 이상한 값이 나옴.
→ 지수부와 가수부에 제한이 있기 때문에 이러한 현상이 발생. 이 점을 주의하자!
→ 물론 다른 자료형에도 이런 제한이 있음.
● 그 밖의 자료형
Float/Double(실수형), Boolean(논리형), Char(문자형)
: String으로 선언되며 String Pool이라는 공간에 구성.
fun main(){
var str1: String = "hello"
var str2 = "world"
var str3 = "hello"
println(str1===str2) // === : 참조 값이 같은 지 판단할 때 사용하는 연산자
println(str1===str3)
}
→ var로 선언된 str1의 참조 주소는 가변형으로, 주소 자체는 추후에 다른 값을 가리키는 타 주소로 변경 가능함. 그러나 일단 선언되어 메모리공간에 생성된 데이터인 hello는 변경되지 않음.
→ str1과 str3는 hello라는 같은 데이터를 가리키고 있으므로 true.
: 컴파일러가 알아서 추론하는 경우
val num05 =127
: 접미사와 접두사를 사용하여 컴파일러가 알아서 추론하게끔 지정할 수 있음
val exp01 = 123L // 접미사 L을 사용해 Long형으로 추론
val exp02 = 0x0F // 접두사 0x를 사용해 16진 표기가 사용된 Int형으로 추론
: 선언 앞 쪽에 자료형을 명시적으로 직접 써 줌, 명시적으로 지정하지 않을 경우 Int 값으로 추론해버리기 때문
val exp07 : Byte = 127
: 선언할 때에도 부호 없는 정수 자료형을 명시적으로 하고, 접미사까지 붙여야 함.
val uint : UInt = 153u
: 실제 코드에는 영향을 미치지 않으며, 단순히 읽기 쉽게 하기 위해 사용
val num = 1_000_000
var a = 1
val s1 = "a is $a" //String 자료형의 s1을 선언하고 초기화, 변수 a가 사용됨.