Unit
이 출력되는 이유는?코틀린으로 코드를 작성하다 보면, 함수 호출 뒤에 kotlin.Unit
이라는 정체불명의 문구가 콘솔에 출력되는 경험을 한 번쯤은 해보셨을 겁니다.
fun main() {
val result = greet()
println(result)
}
fun greet() {
println("안녕하세요!")
}
안녕하세요!
kotlin.Unit
처음 보면 “내가 Unit
을 출력한 적이 없는데 왜 나오지?” 싶은데요, 사실은 greet()
함수의 리턴값이 Unit
이기 때문입니다.
Unit
이란?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
이 표시됩니다.
Unit
출력 흐름이제 "kotlin.Unit"
이 출력되는 원인을 알았으니,
코틀린 함수가 실제로 어떻게 실행되고,
왜 마지막에 Unit
이 반환되는지 흐름을 자세히 이해해봅시다.
코틀린이 함수를 실행할 때는 다음 순서로 동작합니다:
return
문이 있다면 해당 값을 반환하고 종료한다return
이 명시적으로 없으면 Unit
객체를 자동으로 반환한다fun main() {
val result = showInfo()
println("결과: $result")
}
fun showInfo() {
println("정보를 출력합니다.")
}
정보를 출력합니다.
결과: kotlin.Unit
main()
함수에서 showInfo()
를 호출함showInfo()
내부의 println("정보를 출력합니다.")
실행됨showInfo()
에는 return
이 없으므로 → Kotlin은 자동으로 Unit
을 반환Unit
을 result
라는 변수에 담음println("결과: $result")
가 실행되어 kotlin.Unit
이 출력됨Kotlin은 반환값이 명시되지 않은 함수도 "무언가"를 반환한다. 그게 바로
Unit
이다.
즉, Kotlin은 "아무 것도 안 돌려준다"라는 개념이 없고,
대신 "기본적으로 Unit
이라는 객체를 돌려준다"라고 생각하면 됩니다.
Unit
을 반환한 경우fun doSomething(): Unit {
println("뭔가를 하고 있어요!")
}
fun main() {
println(doSomething())
}
결과는 당연히:
뭔가를 하고 있어요!
kotlin.Unit
💡 Unit
은 생략 가능한 타입이지만, 위처럼 명시해도 되고, 안 해도 됩니다.
return
이 없다는 게 "아무 것도 안 함"을 의미하진 않는다Kotlin은 모든 함수가 반환 타입을 가진다는 특징이 있습니다.
void
를 써서 "진짜 아무 것도 없음"을 표현했다면,Unit
이라는 "존재하지만 의미 없는 객체"로 그걸 대신합니다.return
이 없는 함수는 자동으로 Unit
객체를 반환한다println()
으로 함수 호출 결과를 찍으면 Unit
이 출력될 수 있다return
이 없으면 Unit
반환println(myFunction())
처럼 쓰지 않고, 그냥 myFunction()
만 호출하는 습관이 좋다