kotlin 함수 호출 시 kotlin.Unit이 출력되는 이유 + 실행 흐름 설명

Seong Hyeon Kim·2025년 3월 21일
0

코틀린

목록 보기
1/1

✅ 코틀린에서 Unit이 출력되는 이유는?

코틀린으로 코드를 작성하다 보면, 함수 호출 뒤에 kotlin.Unit 이라는 정체불명의 문구가 콘솔에 출력되는 경험을 한 번쯤은 해보셨을 겁니다.

fun main() {
    val result = greet()
    println(result)
}

fun greet() {
    println("안녕하세요!")
}

🤔 실행 결과

안녕하세요!
kotlin.Unit

처음 보면 “내가 Unit을 출력한 적이 없는데 왜 나오지?” 싶은데요, 사실은 greet() 함수의 리턴값이 Unit이기 때문입니다.


📌 Unit이란?

  • Kotlin에서 함수에 반환값이 없을 경우, 자동으로 반환되는 타입입니다.
  • Java의 void와 같은 개념이지만, Kotlin에선 Unit하나의 객체입니다.
  • 따라서, Unit을 변수에 담을 수 있고, println()으로 출력하면 "kotlin.Unit"이 출력됩니다.

✅ 예제: 명시적으로 Unit 리턴

fun greet(): Unit {
    println("안녕하세요!")
}

fun main() {
    val result = greet()
    println(result)
}

📌 위 코드의 greet() 함수는 반환형을 명시적으로 Unit으로 지정했고, 리턴을 하지 않더라도 Kotlin이 자동으로 Unit 객체를 반환합니다.


✅ 해결 방법

Unit이 출력되지 않게 하려면, 함수 호출 자체만 하도록 분리하면 됩니다.

fun main() {
    greet()  // ✅ 이렇게만 호출하면 "kotlin.Unit" 출력 안 됨
}

fun greet() {
    println("안녕하세요!")
}

📌 println(greet())처럼 리턴값을 출력하지 않도록 하면 "kotlin.Unit"은 콘솔에 표시되지 않아요.


🧠 한 줄 요약

Kotlin의 Unit은 반환값이 없는 함수에서 자동으로 반환되는 객체이며, println()으로 출력하면 kotlin.Unit이 표시됩니다.


🚦 Kotlin 함수 실행 순서와 Unit 출력 흐름

이제 "kotlin.Unit"이 출력되는 원인을 알았으니,
코틀린 함수가 실제로 어떻게 실행되고,
왜 마지막에 Unit이 반환되는지 흐름을 자세히 이해해봅시다.


✅ Kotlin 함수 실행 순서

코틀린이 함수를 실행할 때는 다음 순서로 동작합니다:

  1. 함수를 호출한다
  2. 호출된 함수 내부의 코드를 위에서 아래로 차례대로 실행한다
  3. return 문이 있다면 해당 값을 반환하고 종료한다
  4. return이 명시적으로 없으면 Unit 객체를 자동으로 반환한다

🔍 예제로 확인해보기

fun main() {
    val result = showInfo()
    println("결과: $result")
}

fun showInfo() {
    println("정보를 출력합니다.")
}

▶ 실행 결과

정보를 출력합니다.
결과: kotlin.Unit

✅ 실행 흐름을 단계별로 분석해보면

  1. main() 함수에서 showInfo()를 호출함
  2. showInfo() 내부의 println("정보를 출력합니다.") 실행됨
  3. showInfo()에는 return이 없으므로 → Kotlin은 자동으로 Unit을 반환
  4. 그 반환된 Unitresult라는 변수에 담음
  5. 마지막 println("결과: $result")가 실행되어 kotlin.Unit이 출력됨

✅ 핵심 포인트

Kotlin은 반환값이 명시되지 않은 함수도 "무언가"를 반환한다. 그게 바로 Unit이다.

즉, Kotlin은 "아무 것도 안 돌려준다"라는 개념이 없고,
대신 "기본적으로 Unit이라는 객체를 돌려준다"라고 생각하면 됩니다.


🔍 명시적으로 Unit을 반환한 경우

fun doSomething(): Unit {
    println("뭔가를 하고 있어요!")
}

fun main() {
    println(doSomething())
}

결과는 당연히:

뭔가를 하고 있어요!
kotlin.Unit

💡 Unit은 생략 가능한 타입이지만, 위처럼 명시해도 되고, 안 해도 됩니다.


🚫 return이 없다는 게 "아무 것도 안 함"을 의미하진 않는다

Kotlin은 모든 함수가 반환 타입을 가진다는 특징이 있습니다.

  • Java는 void를 써서 "진짜 아무 것도 없음"을 표현했다면,
  • Kotlin은 Unit이라는 "존재하지만 의미 없는 객체"로 그걸 대신합니다.

✅ 마무리 요약

  • Kotlin에서 return이 없는 함수는 자동으로 Unit 객체를 반환한다
  • println()으로 함수 호출 결과를 찍으면 Unit이 출력될 수 있다
  • 함수 내부 로직은 위에서 아래로 차례로 실행되며, 끝까지 가도 return이 없으면 Unit 반환
  • 따라서 println(myFunction())처럼 쓰지 않고, 그냥 myFunction()만 호출하는 습관이 좋다
profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 개발자

0개의 댓글