핀수로그
  • [Kotlin] 함수 탈출하기
    2023년 10월 21일 17시 35분 23초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    지난 글에서 반복문을 탈출한 것 처럼

    함수도 탈출할 수가 있다.

    우린 그걸 return 이라고 부르지...

    마찬가지로 함수에도 라벨을 지정할 수 있을까?

    val human = Human("홍길동", "1995-01-01", Hobby("골프", "운동"))
    
    human.hobby?.let { hobby ->
        if (hobby.type == "운동") {
            println("${human.name}(은/는) ${hobby.name}(을/를) 즐겨한다.")
        }
      println("${human.name}의 취미는 ${hobby.name}이다.")
    }
    println("${human.name}(은/는) ${human.birth}에 태어났다.")
    
    // 홍길동(은/는) 골프(을/를) 즐겨한다.
    // 홍길동의 취미는 골프이다.
    // 홍길동(은/는) 1995-01-01에 태어났다.

    이러한 코드가 있다고 할 때, 결과는 위의 주석과 같을 것이다.
    이때 결과의 첫번째와 세번째 문장만을 출력하고 싶다면 어떡해야할까?
    return@let 을 사용하면 된다. return 을 입력하면 IDE에서 자동완성으로 뜬다.
    하지만 let이 중첩된 경우이거나, 특정한 함수로 지정하고 싶을 때 라벨을 이용하면 좋을 것이다.

    val human = Human("홍길동", "1995-01-01", Hobby("골프", "운동"))
    
    human.hobby?.let label@ { hobby ->
        if (hobby.type == "운동") {
            println("${human.name}(은/는) ${hobby.name}(을/를) 즐겨한다.")
            return@label
        }
        println("${human.name}의 취미는 ${hobby.name}이다.")
    }
    println("${human.name}(은/는) ${human.birth}에 태어났다.")
    
    // 홍길동(은/는) 골프(을/를) 즐겨한다.
    // 홍길동(은/는) 1995-01-01에 태어났다.

     
    여담이지만 let을 null check를 하기 위한 용도로 사용하는 것은 부적합하다고 한다.
    코틀린..알면서도 모르는 것이 한가득한 녀석이다.
    문법 공부도 게을리해선 안되겠다.


    공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.
    말씀해주시면 수정하겠습니다. 감사합니다.

    References

    아래 글을 참고하여 작성 되었습니다.

    Returns and jumps | Kotlin

    kotlinlang.org

     

    728x90
    반응형
    댓글