inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

5강. 코틀린에서 제어문을 다루는 방법

when 에서 early return 관련

617

우창호

작성한 질문수 1

4

안녕하세요! 이해가 쏙쏙 되도록 강의를 잘 해주셔서 정말 잘 듣고 있습니다.

"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("이 코드가 동작하나요?")
}

혹시 제가 잘못 이해하고 있는 것인지 답변 부탁 드릴게요~~ ^^

kotlin oop java

답변 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

우창호

네네~ 잘 이해되었습니다~ 도움이 많이 되었네요!

감사합니다!

수업노트

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