Underscore의 적용
큰수를 표시할 경우 일반적으로는 100단위로 구분하여 나타냅니다.1000,000,000
그러나 코딩시 위와 같은 표시는 에러를 발생합니다.
대신에 코틀린은 underscore를 사용합니다.
val a=1000_000_000
a
res4: kotlin.Int = 1000000000
a
res4: kotlin.Int = 1000000000
자료의 변환
자료형은 자료가 저장되는 크기를 지정하는 것입니다. 이것은 작은 자료형은 큰 자료형의 포함된다는 의미는 아닙니다. 그러므로 자료형이 다르면 개별적으로 취급됩니다.즉, 다른 자료형 사이의 연산이나 교환은 일어날 수 없습니다.
물론 자바, 파이썬등 다른 언어에서는 자동 변환이 일어나지만 코틀린의 경우 반드시 자료들의 연산을 위해서는 자료형을 일치시켜야 합니다.
예를들어 정수형인 변수값이 long 형인 변수에 직접적으로 할당되지 않습니다.
val a: Int=1
val b: Int?=a
println("a:$a, b:$b")
a:1, b:1
a == b
res8: kotlin.Boolean = true
val c: Long=a
c
error: type mismatch: inferred type is Int but Long was expected val c: Long=a
val b: Int?=a
println("a:$a, b:$b")
a:1, b:1
a == b
res8: kotlin.Boolean = true
val c: Long=a
c
error: type mismatch: inferred type is Int but Long was expected val c: Long=a
위 결과와 같이 정수형과 long 형은 자료형이 다르기 때문에 에러가 발생합니다.
그러므로 위와 같은 과정은 자료형의 변환이 우선되어야 합니다.
val b: Byte = 1
val i: Int = b.toInt()
b
res16: kotlin.Byte = 1
i
res17: kotlin.Int = 1
//큰 자료형에서 작은 자료형으로 변환
val b: Int = 1
val i: Byte = b.toByte()
b
res18: kotlin.Int = 1
i
res19: kotlin.Byte = 1
val i: Int = b.toInt()
b
res16: kotlin.Byte = 1
i
res17: kotlin.Int = 1
//큰 자료형에서 작은 자료형으로 변환
val b: Int = 1
val i: Byte = b.toByte()
b
res18: kotlin.Int = 1
i
res19: kotlin.Byte = 1
큰 자료형에서 작은 자료형으로 변환하기 위해서 각 자료형의 범위내에서 실행해야 합니다.
문자 역시 근본은 정수에서 출발한 것으로 문자와 정수간에 상호변환이 가능합니다.
val a=69
val b:Char=a.toChar()
b
res21: kotlin.Char = E
val c: Int=b.toInt()
c
res22: kotlin.Int = 69
val b:Char=a.toChar()
b
res21: kotlin.Char = E
val c: Int=b.toInt()
c
res22: kotlin.Int = 69
이렇게 자료형간의 변환은 위에서 소개한 메소드는 다음과 같습니다.
메소드 | 내용 |
---|---|
obj.toByte() | Byte로 변환 |
obj.toShort() | Short로 변환 |
obj.toInt() | Int로 변환 |
obj.toLong() | Long로 변환 |
obj.toLong() | Long로 변환 |
obj.toFloat() | Float로 변환 |
obj.toChar() | Char로 변환 |
val byte: Byte=10
val short:Short= byte.toShort() // byte →Short
short
res22: kotlin.Short = 10
val int: Int=byte.toInt() // byte →Int
int
res20: kotlin.Int = 10
Double int is Int
res21: kotlin.Boolean = true
val long: Long= int.toLong() // Int → Long
long is Long
res23: kotlin.Boolean = true
val float: Float= int.toFloat() // Int → Float
float
res24: kotlin.Float = 10.0
float is Float
res25: kotlin.Boolean = true
val double:Double=byte.toDouble() // Byte → Double
double
res26: kotlin.Double = 10.0
double is Double
res27: kotlin.Boolean = true
val short:Short= byte.toShort() // byte →Short
short
res22: kotlin.Short = 10
val int: Int=byte.toInt() // byte →Int
int
res20: kotlin.Int = 10
Double int is Int
res21: kotlin.Boolean = true
val long: Long= int.toLong() // Int → Long
long is Long
res23: kotlin.Boolean = true
val float: Float= int.toFloat() // Int → Float
float
res24: kotlin.Float = 10.0
float is Float
res25: kotlin.Boolean = true
val double:Double=byte.toDouble() // Byte → Double
double
res26: kotlin.Double = 10.0
double is Double
res27: kotlin.Boolean = true
10진수를 2진수 또는 16진수로 변환하기 위해 다음 메소드를 적용합니다.
객체.toString(2) : 10 진수인 객체를 2 진수로 변환
객체.toString(16) : 10 진수인 객체를 16 진수로 변환
객체.toString(16) : 10 진수인 객체를 16 진수로 변환
10.toString(2) // 10진수 → 2진수
res28: kotlin.String = 1010
15.toString(16) // 10진수 → 16진수
res29: kotlin.String = f
res28: kotlin.String = 1010
15.toString(16) // 10진수 → 16진수
res29: kotlin.String = f
위에서 다른 자료형을 연산하기 위해서는 반드시 일치시켜야 됨을 보였습니다.
그러나 코틀린의 경우 변수에 할당된 값에 따라 자료형을 유추합니다.
이 특성 때문에 자료형을 명시하지 않을 경우 자료간의 연산의 결과 역시 유추하여 결정됩니다.
10.toString(2)
res28: kotlin.String = 1010
15.toString(16)
res29: kotlin.String = f
val a=1
val b=a+0.3
b
res25: kotlin.Double = 1.3
a is Int
res26: kotlin.Boolean = true
b is Double
res27: kotlin.Boolean = true
val c= 1/0.5
c
res28: kotlin.Double = 2.0
res28: kotlin.String = 1010
15.toString(16)
res29: kotlin.String = f
val a=1
val b=a+0.3
b
res25: kotlin.Double = 1.3
a is Int
res26: kotlin.Boolean = true
b is Double
res27: kotlin.Boolean = true
val c= 1/0.5
c
res28: kotlin.Double = 2.0
같은 종류의 자료형일 경우 더 큰 자료형으로 유추됩니다.
val l=20L+2
l
res29: kotlin.Long = 22
l is Int
error: incompatible types: Int and Long
l is Long
res31: kotlin.Boolean = true
l
res29: kotlin.Long = 22
l is Int
error: incompatible types: Int and Long
l is Long
res31: kotlin.Boolean = true
댓글
댓글 쓰기