0101011001010111

Kotlin - return에 대해 알아보자! 본문

Kotlin/[스스로]Kotlin&안드로이드

Kotlin - return에 대해 알아보자!

[진주] 2023. 8. 9. 20:49
728x90
반응형
fun main() {
    println("첫 번째 숫자를 입력하세요:")
    val firstNumber = readLine()?.toIntOrNull()
    if (firstNumber == null) {
        println("올바른 숫자를 입력해주세요.")
        return
    }

    println("두 번째 숫자를 입력하세요:")
    val secondNumber = readLine()?.toIntOrNull()
    if (secondNumber == null) {
        println("올바른 숫자를 입력해주세요.")
        return
    }

    if (firstNumber > secondNumber) {
        println("큰 숫자는 $firstNumber 입니다.")
    } else if (secondNumber > firstNumber) {
        println("큰 숫자는 $secondNumber 입니다.")
    } else {
        println("두 숫자는 같습니다.")
    }
}

두 수중 큰 숫자 찾기 코딩을 하는 중에 return에 대해 궁금증이 생겼다.

과연 이 return은 어떻게 쓰는걸까 

 

엄청난 걸 알아버렸다.

나만 몰랐던 return의 비밀!!!!!!!!

먼저, return은 내가 생각하기엔 실행된 값을 뱉어주는 역할이라고 생각했는데,

 

return은 3가지 기능이 있다. 

 

첫번째는, 내가 생각했던것 처럼

1.함수 또는 메서드에서의 반환 

fun add(a: Int, b: Int): Int {
    return a + b
}

ㄴ 자 여기서 내가 간과했던 부분이 있었다.

a는 int라고 쓰여있고 b도 int라고 쓰여있어서 당연히 반환값인 :Int를 안써도 될 줄 알았다.

하지만 그러면 안된다!!!!!!!!

이유는 조금 있다가 2번을 보고 설명하겠다.

 

위 예시처럼 일단, return은 a+b값을 반환해줄 수 있다.


2. 함수 또는 메서드의 실행 중단

- 반환 값이 없는 함수('Unit'반환)나 메서드에서도 'return'을 사용하면 해당 함수나 메서드의 실행을 즉시 중단하고 호출한 곳으로 되돌아갑니다.

 

fun printPositiveNumber(number: Int) {
    if (number < 0) {
        println("Negative number!")
        return
    }
    println(number)
}

ㄴ 여기서의 return은 실행 중단이다.!!!


어떤경우에는 반환을 하고, 어떤경우에는 중단을 하는지 !! 세부적으로 알아보자!

먼저 return에 대해 알아야 할 것.

▶ return은 함수에서만 쓰인다.

▶ return을 쓸 때, 반환값이 없다면!! 함수를 즉시 중단하고 호출한 곳으로 되돌아간다.  [헷갈릴수 있으니 매우중요]

    ▼설명

 

방금 예시로 보여준 첫 코드에서는, 반환 값이 있다.

fun add(a: Int, b: Int): Int {
    return a + b
}

 

그렇기 때문에, 값을 반환해주는 return이 되었다. // a+b

 

그런데... 똑같은 코드라도 반환값을 써주지 않거나, : Unit 이라면 

  ㄴ 반환값을 안써주는 거나 :Unit이나 같은 의미이다! 

 

fun add(a: Int, b: Int)  {
    return a + b
}

 

▲ 이렇게 반환값이 없는 함수는 즉시 종료되며, 호출한 곳으로 돌아간다.

 

※종료의 범위 확인하기!!

 

 

자 이런 코드가 있다고 치자.

 

빨간색 if문에서 return이 발생했다고 치자.

이것은 함수를 종료 시키는 return이다

 

왜 종료 되었을까? 종료의 범위는 어디까지일까?

 

생각해보자.

 

▼왜 종료된거야?

1. 먼저 if문을 감싸고 있는 함수! main에 반환값이 없었다!!

fun main() {} < 이런식으로 되어있었기 때문에, 반환 값이 없어서 종료 되었다. 

 

▼ 종료의 범위

종료의 범위는 함수! 이므로, return을 감싸고 있는 함수!! 즉 main함수가 통째로 종료 되게된다.

 

 


 

 

 

자 다음은 함수속에 함수속에 함수속에 중간에 return 들어가있고 또 함수가 있는 뭐 그런 형태이다!! 

 

여기선 종료는 어떻게 될까 ?

 

 

▼종료의 범위

return은 해당 함수가 종료되는것이다 

그러므로 함수 2와 함수 2안에들어있는 3이 종료되고, 

 

종료된 곳으로 돌아가기때문에, 함수 1로 돌아가서 실행되게 된다! 

 

 

 

 

 

 

 

 


세번째 return은 

 

람다식에서의 반환: Kotlin의 람다에서는 return을 직접 사용하면 람다를 감싸고 있는 함수가 반환됩니다. 그러나 종종 람다 내부에서만 반환하고 싶을 때가 있습니다. 이럴 경우 return 뒤에 레이블을 붙여 특정 람다나 익명 함수에서만 반환할 수 있습니다. return@label 형식을 사용합니다.

 

fun listFilter() {
    val numbers = listOf(1, 2, 3, 4, 5)
    numbers.forEach {
        if (it == 3) return@forEach // '3'일 때만 람다의 실행을 중단하고 다음 숫자로 넘어감
        println(it)
    }
}

 

나는 람다식도 모르니 이것에 대한 설명은 할 수 없다 !!!! 'ㅇ'  다음에 알게되면 정리하자 

 

 

728x90
반응형