일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 채팅
- 코틀린
- 자료형
- 프로젝트
- Kotlin
- 팀프로젝트
- Spring Boot
- springboot
- 스프링부트
- 도커
- MySQL
- 백엔드 설정
- JWT
- Java
- 자바
- service
- 네티 클라이언트
- Security
- Repository
- Spring
- netty
- react
- recoil
- controller
- 배열
- 기초설정
- axios
- toyproject
- 네티 서버
- 클래스
- Today
- Total
hyuko
조건문 본문
흔히 쓰이는 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 연산자는 값이 특정 타입인지 확인하며, 명시적 캐스팅을 통해 낮은 타입에서 높은 타입으로 값을 변형할 수 있다.