개발하는 자몽

[Kotlin] 기본 문법 2 본문

Java & Kotlin

[Kotlin] 기본 문법 2

jaamong 2025. 1. 19. 13:43

if

코틀린의 `if`문은 표현식(expression)으로, 아래와 같은 방식으로 변수에 값으로 할당될 수 있다.

fun main() {
    
    val a: Int = 100
    val b: Int = 200
    val c: Int
    
    c = if (a >= b) {
        a
    } else {
        b
    }
    
    println(c)
}

삼항연산자를 풀어서 쓰는 느낌이다.

 

 

`null` 체크는 다음과 같이 할 수 있다. 

fun main() {
    
	val a: Int? = null
    
	if (a == null) {
            println("null check ture")  // print 
	} else {
            println("a = $a")  // a에 null이 아닌 값이 담긴 경우, a에 할당된 값이 출력됨. ex) a = 100
	}

}

 

 

in

`in` 연산자를 사용하여 변수에 할당된 값이 주어진 범위에 속하는지 알 수 있다.

fun main() {
    
	val a: Int? = 100
    
	if (a in arrayOf(100, 200, 300)) {
	    println("contained")  // print
	} else {
	    println("not contained")  // a에 할당된 값이 배열에 없는 값이면, not contained 가 출력된다.
	}

}

 

when

다음 `if-else`문과 `when`문은 동일한 의미이다.

fun main() {
    
	val a: Int? = 100
    
	when (a) { 
	    100 -> println("1")  // print
	    200 -> println("2")
	    300 -> println("3")
	    else -> println("4")
	}

	if (a == 100) {
	    println("1")  // print
	} else if (a == 200) {
	    println("2")
	} else if (a == 300) {
	    println("3")
	} else {
	    println("4")
	}

}

 

또한 `when`문에서 범위를 지정할 수 있다.

fun main() {
    
	val a: Int = 399
    
	when (a) {
   	    in 100..199 -> println("1")  // 100 <= a <= 199
  	    in 200..299 -> println("2")  // 200 <= a <= 299
 	    in 300..399 -> println("3")  // 300 <= a <= 399
  	    else -> println("4") 
	}

// 399가 출력됨

}

 

참고로 nullable 한 변수를 대상으로 실행하면 다음과 같은 에러가 발생한다.

Incompatible types 'kotlin.Int?' and 'kotlin.ranges.IntRange'.

 

Class / Data class / Enum class

fun main() {
    
    val item1: Item1 = Item1("BOOK", 10_000)  // Item1 클래스의 인스턴스 생성
    println("Item1 name is ${item1.name}, price is ${item1.price}")
    println(item1)

    val item2: Item2 = Item2("BOOK", 10_000) // Item2 데이터 클래스의 인스턴스 생성
    println("Item2 name is ${item1.name}, price is ${item1.price}")
    println(item2)
}

// 기본적으로 생성자가 생성됨
class Item1(val name: String, val price: Int) 

// 기본적으로 getter, setter, Equal, hashCode, toString, Copy, Component, and 함수들이 생성됨
data class Item2(val name: String, val price: Int)

enum class Color {
    RED,
    GREEN,
    BLUE,
}
# 위 코드 실행 결과
Item1 name is BOOK, price is 10000
Item1@133314b
Item2 name is BOOK, price is 10000
Item2(name=BOOK, price=10000)

 

 

Data class

  • 코틀린의 `Data class`는 자바의 `Record`와 유사하게 사용할 수 있는 듯하다. → Ex. `DTO` 역할
  • 위와같이 `Data class`를 정의하고 변수를 var로 선언하면 `setter`가 자동으로 생성된다.
    • `val`로 선언한 경우, 특성상 변수를 변경할 수 없기 때문에 `setter`가 생성되지 않는다.
    • 실행결과를 보면 `Data class`는 클래스 정의 시 `toString`이 자동 생성되므로, 출력했을 때 초기화한 인스턴스 값이 나오는 것을 확인할 수 있다.

 

 

 

Comments