hyuko

조건문 본문

코틀린/core

조건문

hyuko12 2024. 12. 19. 16:57
728x90
반응형

흔히 쓰이는 if 문이나 while 문의 형태는 java, kotlin, c++ 등을 비롯한 대부분의 현대 언어에서 비슷하다.

그렇기 때문에 if 문만 봐서는 어떤 언어 인지 구분하기 어렵다.

if 문

기본적으로 if 문은 해당 조건을 만족했을 때 (조건이 true를 반환) 본문을 실행한다.

fun main() {
	val i = 1 // 또는 5
	
	if(i < 3) {
		println("Smaller")
	} else {
		println("Bigger")
	}
}
  • 여기서 자바와 다르게 강력한 점은 코틀린의 if-else 문의 경우는 표현식으로 사용될 수 있다.
  • 그렇기 때문에 값으로 생성이 가능하다
val value = if(condition) {
	// 본문 1
} else {
	// 본문 2
}
  • 여기서 반환되는 값은 if 가 true일 때는 본문 1의 값 else 일 때는 본문 2의 값
  • 만약 본문이 비어있거나 표현식이 아닌 문장은 Unit을 반환

코틀린에서 if문은 자바나 자바스크립트의 삼항 연산자를 대체한다.

// 자바
final String name = user == null ? "" : user.name

// 자바스크립트
const name = user === null ? "": user.name

// 코틀린
val name = if (user == null) "" else user.name
  • 삼항연산자가 익숙한 자바 개발자는 어색할지도 모르겠지만 코틀린에는 엘비스 연산자, 널 가능한 타입의 확장 함수, 안전 호출 등 삼항 연산자가 사용되는 경우를 대체할 수 있는 다른 방법을 제공한다.
  • 간단한 예는 다음과 같고 자세한것은 8 장에서 기록한다.
// 자바
String name = user == null ? "": user.name

// 코틀린
val name = user?.name ?: ""

// 또는
val name = user?.name.orEmpty()

When 문

if-else 문을 대체 가능하다.

조건이 많아지게 되면 when 문을 사용하는 것이 좋다.

스위치 케이스와 비슷하다

fun main() {
	println("Is it going to rain?")
	val probability = 70
	when {
		probability < 40 -> {
			println("Na-ha")
		}
		probability <= 80 -> {
			println("Likely")
		}
		probability < 100 -> {
			println("Yes")
		}
		else -> {
			println("Holly Crab")
		}
	}

}
  • 중괄호도 if-else 와 같게 본문내용이 여러 개가 아니라면 생략가능

when 문도 동일하게 값을 반환할 수 있기 때문에 표현식으로 사용가능하다.

조건으로 값을 받는 when 문

when 키워드 다음 소괄호를 두고 안에 값을 넣으면 switch-case 문처럼 사용가능

덕분에 코틀린은 스위치 케이스를 지원하지 않는다.

  • 오히려 업그레이드 되었다
  • 스위치는 동등 비교를 했더라면 when의 경우에는 is 예약어나 in을 사용해서 객체가 조건으로 주어진 값을 포함하는지도 확인할 수 있다.
private val magicNumbers = listOf(7, 13)

fun describe(a: Any?) {
	when(a) {
		null -> println("Nothing")
		1, 2, 3 -> println("Small number")
		in magicNumbers -> println("Magic number")
		in 4..100 -> println("Big number")
		is String -> println("This is just $a")
		is Long, is Int -> println("This is Int or Long")
		else -> println("No idea, really")
	}
}

fun main() {
	describe(null)
	describe(1)
	describe(3)
	describe(7)
	describe(9)
	describe("AAA")
	describe(1L)
	describe(-1)
	describe(1.0)
}

is 확인

is 연산자는 값이 특정 타입인지 확인한다.

예를 들자면 123은 당연히 String 타입이 아니다

하지만 123은 Number 타입이자 Int 타입이므로 두 군데에 모두 true를 반환한다.

값이 특정 타입이 아님을 확인할 때는! 기호를 붙여! is로 사용하면 된다.

명시적 캐스팅

모든 Int는 Number이므로 Int 타입인 값을 항상 Number로 사용할 수 있다.

이렇게 낮은 타입에서 높은 타입으로 값을 변형하는 과정을 업캐스팅이라 한다.


요약

Kotlin의 조건문인 if와 when 문은 Java와 유사하지만, Kotlin의 if-else 문은 표현식으로 사용되어 값으로 생성될 수 있다. 삼항 연산자를 대체하며, 엘비스 연산자와 안전 호출 등을 제공한다. when 문은 switch-case 문을 대체하며, 조건이 많을 때 유용하다. when 문은 is 예약어나 in을 사용해 객체가 특정 조건을 포함하는지 확인할 수 있다. 또한, is 연산자는 값이 특정 타입인지 확인하며, 명시적 캐스팅을 통해 낮은 타입에서 높은 타입으로 값을 변형할 수 있다.

728x90
반응형

'코틀린 > core' 카테고리의 다른 글

코틀린으로 만드는 첫 프로그램!  (1) 2024.12.19
코틀린 기본 타입  (1) 2024.12.19
변수  (0) 2024.12.12
코틀린?  (0) 2024.12.11