in/out 키워드는 타입 매개변수의 업 및 다운 캐스팅을 할 수 있도록 지원되는 키워드이다.

out : AAA<서브 타입>을 AAA<Super 타입>에 대입할 수 있도록 지원.

in : AAA<Super 타입>을 AAA<서브 타입>에 대입할 수 있도록 지원.

* : AAA<*> 은 타입 인수가 무엇이든 상관없이 대입 할 수 있도록 지원.

class AAA<out T>

class BBB<in T>

fun main(args: Array<String>)
{
	val aaaSub = AAA<Int>()
	val aaaSuper: AAA<Any> = aaaSub

	val bbbSuper = BBB<Any>()
	val bbbSub: BBB<Int> = bbbSuper

	val star: AAA<*> = aaaSub
}

.. 연산자는 범위를 표현하는 연산자 이다.

.. 연산자는 operator fun rangeTo 라는 함수로 치환된다.

만약 클래스를 정의 하고 하고 싶을 경우, operator fun rangeTo 라는 함수를 오버라이딩하면 된다.

fun main(args: Array<String>)
{
	val oneToTen: IntRange = 1..10
	println(5 in oneToTen)

	val upperAtoZ: CharRange = 'A'..'Z'
	if ('C' in upperAtoZ)
		println("대문자입니다.")

	if ('p' in 'a'..'z')
		println("소문자입니다.")
}

 

 

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

+ Recent posts