반응형
코틀린 기본문법
문제:
변수가 Null을 가지지 못하게 하고싶다면?
해법:
물음표 연산자 ?를 사용하지 않고 변수의 타입을 정의한다.
nullable타입은 ?나 ?:를 사용한다.
class Person(val first:String,val middle:String? ,val last:String)
이렇게 선언되어있는 class에서
val northWest = Person("North",null,"West")
if(northWest.middle != null){
val middleNameLength = northWest.middle.length
println("Middle name is $middleNameLength characters long")
}
//영리한 타입변환 가능
var northWest = Person("North",null,"West")
if(northWest.middle != null){
val middleNameLength = northWest.middle.length
println("Middle name is $middleNameLength characters long")
}
//영리한 타입변환 불가능
val타입은 내용 변경이 불가능이라, if문에서 걸린다는 것을 프로그램이 인지를 하지만, var경우 if문 안으로 들어오더라도, 타입이 변경될 수 있다는 점 때문에 영리한 타입변환이 불가능하다.
val northWest = Person("North",null,"West")
if(northWest.middle != null){
val middleNameLength = northWest.middle!!.length
println("Middle name is $middleNameLength characters long")
}
//영리한 타입변환 가능
!!연산자를 사용하면 영리한 타입변환이 가능하지만, Exception을 마주칠 각오를 해야한다.
안전하게 사용하는 방법은 ?를 통해 nullcheck를 하고 사용하여 ?: 엘비스 프레슬리 연산자와 병행하여 사용하는 것이 좋다.
val jkRolling = Person("Jake",null,"Smith")
var northWest = Person("North",null,"West")
val middleNameLength = jkRolling.middle?.length ?: 0
println(middleNameLength)
//영리한 타입변환 가능
*코틀린은 무조건 형변환을 명시적으로 해줘야한다.*
int x = 42;
double y = x; // 자동 형변환(O)
val x: Int = 42
val y: Double = x // 에러! 자동형변환 불가(X)
val y2: Double = x.toDouble() // 이렇게 명시적으로 변환해야 함
*코틀린은 거듭제곱 함수를 따로 내장 제공하지 않는다.*
Double과 Float에는 Pow라는 메서드가 제공되어서 사용하려면
Int를 거듭제곱하려면 아래와 같이 형변환을 하고 다시 형변환을 해주어야한다.
val x = 2
val exp = 3
val result = x.toDouble().pow(exp).toInt() // 8
*코틀린 비트 불리언 식과 비트 연산자는 다음과 같이 사용한다.*
fun main() {
// 비트 논리 연산자 (Boolean 아님)
println(15 and 7) // 7 (1111 and 0111 = 0111)
println(5 or 2) // 7 (0101 or 0010 = 0111)
println(15 xor 5) // 10 (1111 xor 0101 = 1010)
println(32767.inv()) // -32768 (비트 반전)
println(1 shl 3) // 8 (0001 << 3 = 1000)
println(8 shr 1) // 4 (1000 >> 1 = 0100)
println(-17 ushr 2) // 1073741819 (부호 없는 우측 시프트)
}
val n = 5 // 0000 0101
val left = n shl 2 // 20 (0001 0100)
val right = n shr 2 // 1 (0000 0001)
val uright = n ushr 2 // 1 (0000 0001)
println(left) // 20
println(right) // 1
println(uright) // 1
코를린에서 pair로 묶는 방법은
fun main() {
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
println(map) // 출력: {key1=1, key2=2, key3=3}
}반응형