타입 매개 변수는 대부분의 상황에서 일반 타입 처럼 사용할 수 있으나, 특정 상황에서는 불가능 하다.

예를 들면 is 키워드가 그렇다.

만약 is 키워드를 사용하고 싶다면, fun 앞에 inline을 붙여주어야 하며, 타입 매개 변수 앞에는 reified 키워드를 붙여주어야 한다.

inline fun <reified T> check()
{
	val number = 0
	if (number is T)
		println("T는 Int 타입 입니다.")
}

fun main(args: Array<String>)
{
	check<Int>()
}

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다

함수 리터럴 : (Int)->Unit 은 매개변수가 Int타입이고, 반환타입이 Unit인 함수를 저장할 수 있는 타입을 뜻함.

람다식 : {매개변수 -> 반환 값} 형태를 이야기 함.

fun main(args: Array<String>)
{
	val instantFunc: (Int) -> Unit
	instantFunc = { number: Int ->
		println("Hello $number")
	}

	instantFunc(33)
	instantFunc.invoke(33)
}

위의 예제 코드에서 .invoke라는 함수가 있는데, 함수 타입의 변수를 해당 함수를 통하여, 호출해도 된다.

 

익명 함수 : 람다 식으로 표기된 함수 리터럴을 함수 이름이 없는 함수로 다르게 표현할 수 있다. 이를 익명함수라 한다. 

                fun{value type}:{return type}

fun main(args: Array<String>)
{
	val instantFunc: (Int) -> Unit
	instantFunc = fun(number: Int): Unit
	{
		println("Hello $number")
	}

	instantFunc(33)
	instantFunc.invoke(33)
}

it 식별자 : 람다식의 매개 변수가 하나일 경우, 매개 변수 선언을 생략할 수 있다. 그리고 그 매개 변수를 사용하고 싶을 때 사용되는 키워드이다.

fun main(args: Array<String>)
{
	val instantFunc: (Int) -> Unit = {
		println("Hello $it")
	}

	instantFunc(33)
}

 

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다

sealed 키워드는 자신의 중첩 클래스에 한해서만 상속을 허용하는 키워드이다.

해당 내용에 대한 예제 코드는 다음과 같다.

sealed class Outer
{
  class One : Outer()
  class Two : Outer()
  class Three : Outer()
}

fun main(args: Array<String>)
{
  val instance: Outer = Outer.Three()

  val text: String = when (instance)
  {
    is Outer.One -> "One"
    is Outer.Two -> "Two"
    is Outer.Three -> "Three"
  }

  println(text)
}

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다.

+ Recent posts