when 에서 early return 관련
617
작성한 질문수 1
안녕하세요! 이해가 쏙쏙 되도록 강의를 잘 해주셔서 정말 잘 듣고 있습니다.
"5강. 코틀린에서 제어문을 다루는 방법" 에서 궁금한 점이 있어 질문 드립니다.
when (값) 에서 값을 생략하면 ealry return 처럼 동작한다고 설명해주셨는데, 실제 코드를 수행하면 그렇게 동작하지 않는 것 같네요.
아래와 같이 println("xxx") 를 추가했을 때 early return 이라면 해당 코드가 동작하지 않아야 되는데 동작을 합니다.
fun judgeNumber2(number: Int) {
when {
number == 0 -> {}
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어지는 숫자는 홀수입니다")
}
println("이 코드가 동작하나요?")
}실제 early return 으로 동작하려면 아래와 같이 when expression 을 통째로 return 해야 가능해 보입니다.
이렇게 하면 맨 아래 코드가 intellij 에서는 unreachable code 라고 뜨네요.
fun judgeNumber2(number: Int) {
return when {
number == 0 -> {}
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어지는 숫자는 홀수입니다")
}
println("이 코드가 동작하나요?")
}혹시 제가 잘못 이해하고 있는 것인지 답변 부탁 드릴게요~~ ^^
답변 1
4
안녕하세요 우창호님!! 아이고~~ 너무나도 좋은 질문 감사드립니다!!! 😊
결론부터 말씀드리자면, 제 설명에 부족함이 있었던 것 같습니다!!! 제가 전달하고자 했던 when을 ealry return 처럼 사용할 수 있다는 의미는 이런 의미였습니다!!
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다") // (1)
number % 2 == 0 -> println("주어진 숫자는 짝수입니다") // (2)
else -> println("주어지는 숫자는 홀수입니다") // (3)
}
}위와 같은 코드에서 judgeNumber2(0) 을 사용하는 경우에
첫 번째 when 구문에 걸려 "주어진 숫자는 0입니다"가 출력되고 나머지 when은 무시되는데요
이러한 동작이 마치 첫 번째 when 구문만 실행하고 return 한 것처럼 동작하기에 ealry return 처럼 동작한다고 표현했습니다..!!!
또 다른 예를 들어 보면,
fun judgeNumber2(number: Int) {
when {
number % 2 == 0 -> println("주어진 숫자는 2의 배수입니다") // (1)
number % 3 == 0 -> println("주어진 숫자는 3의 배수입니다") // (2)
number % 6 == 0 -> println("주어진 숫자는 6의 배수입니다") // (2)
}
}위와 같은 코드에서 judgeNumber(6) 을 호출할 경우에 "주어진 숫자는 2의 배수입니다"만 출력되고 나머지 when은 무시되어 when 자체가 종료되게 됩니다. 이 부분이 첫 번째 구문 실행 이후 return 되어 나머지 구문이 무시된 것처럼 느껴졌습니다!!!
다만, 창호님께서 짚어주신것처럼 함수 자체가 when에 의해 끝나는(=return되는) 것은 아닙니다!! 🙏
when 자체에서 함수가 완전히 끝나게 하려면 여러 방법이 있겠지만, 아래와 같이 쓸수 있을 것 같습니다!! 😊
fun judgeNumber2(number: Int) {
when {
number == 0 -> {
println("주어진 숫자는 0입니다") // (1)
return
}
number % 2 == 0 -> {
println("주어진 숫자는 짝수입니다") // (2)
return
}
}
println("주어지는 숫자는 홀수입니다")
println("여기가 실행됩니다!!")
}when 절의 각 구문에는 여러줄이 들어갈 수 있기 때문에 { } 을 사용해 return을 적어주는 방법입니다!!
만약 else부분까지 return을 사용하게 되면 when의 모든 경우에서 return이 되기에 when절 아래로 아예 내려 주었습니다!
정말 좋은 포인트 짚어주셔서 감사드립니다!! 🙏
언제든 궁금하신 내용 있으시면 편하게 질문 남겨주세요!! 감사합니다! 🙇
수업노트
0
59
1
싱글톤과 스프링
0
74
2
get() = 3
0
54
2
강사님
0
77
1
강의 복습하면서 생긴 질문
1
97
1
Kotlin과 Java의 현업에서의 활용
0
130
2
data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문
0
78
1
코틀린에서 상속 시, 주의점에 대한 질문
1
102
3
내용 이해 질문
0
58
1
자바와 코틀린의 함수형 프로그래밍,
1
93
1
플랫폼 타입 설명 문의
2
79
2
널 아님 단언 관련 질문
0
86
1
강의 중 질문
0
81
2
범위 비교 질문
1
93
2
타입캐스팅 궁금한점 질문드립니다.
1
241
2
코틀린 val 질문
0
168
2
완강 후 Kotlin 이런저런 질문 드려봅니다!
3
413
2
확장함수 스타일 질문
0
140
2
확장 프로퍼티 질문
1
158
1
update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!
1
284
1
java class의 NotNull 어노테이션 인식
1
265
1
[16강] 확장함수 관련 질문입니다!
1
134
2
리턴타입 사용시 any를 사용해도 괜찮은가요?
1
143
1
안녕하세요 scope function 에 receiver 가 없는 경우
1
172
1





