kotlin

태태개발일지 - Kotlin 기본문법

태태코 2025. 9. 7. 14:09
반응형

코틀린 기본문법

 

문제:

변수가 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}
}
반응형