Kotlin

[android : kotlin] 코틀린 Unit 오브젝트 사용방법 & 사용 예시

Unit 키워드는 자바의 void에 해당된다. 

Unit 클래스를 살펴보면 싱클턴 클래스 라는 것을 알 수 있다. 싱글턴이란?

/*
 * Copyright 2010-2015 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package kotlin

/**
 * The type with only one value: the `Unit` object. This type corresponds to the `void` type in Java.
 */
public object Unit {
    override fun toString() = "kotlin.Unit"
}

다음에 보는 예제 코드 처럼 3가지 유형으로 사용이 가능하다. return문만 선언하여 사용하는 경우, 리턴 키워드 뒤에 Unit을 리턴한 경우, 리턴문을 생략한 경우이다.

fun rtnUnit(): Unit {
    println("call rtnUnit()")
    return 
}

fun rtnUnit2(): Unit {
    println("call rtnUnit2()")
    return Unit
}

fun rtnUnit3(): Unit {
    println("call rtnUnit3()")    
}

fun main (args: Array<String>) {
	
  rtnUnit()
  rtnUnit2()
  rtnUnit3()
  
}

hashCode()메서드를 사용하여 리턴 결과를 확인해보니 동일한 객체(싱글톤)로 확인이 되었다.

fun rtnUnit(): Unit {
    println("call rtnUnit()")
    return 
}

fun rtnUnit2(): Unit {
    println("call rtnUnit2()")
    return Unit
}

fun rtnUnit3(): Unit {
    println("call rtnUnit3()")
    
}
 
fun main (args: Array<String>) {  
  println(rtnUnit().hashCode())
  println(rtnUnit2().hashCode())
  println(rtnUnit2().hashCode())
}

[출력결과] : 해시코드값이 746292446으로 동일하다. 즉 같은 객체이다.

call rtnUnit()
746292446
call rtnUnit2()
746292446
call rtnUnit2()
746292446

메서드를 생성시 리턴타입을 Unit으로 지정한 경우 리턴값이 존재하면 오류가 발생된다.

//리턴값이 있으면 오류가 발생된다.
//(The integer literal does not conform to the expected type Unit)

 fun rtnUnit4(): Unit {
     println("call rtnUnit4()")
     return 1
 }
 
 
 fun rtnUnit4(): Unit {
    println("call rtnUnit4()")
    return ""
}

[REFERENCE]

kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/#unit

kotlinlang.org/docs/reference/functions.html#unit-returning-functions

Leave a Reply

error: Content is protected !!