본문 바로가기

Android/안드로이드 스터디(Kotlin)61

Kotlin] 36. 반복자 반복자는 구간 속 원소를 하나하나 빼내는 인터페이스이다. 코틀린은 이미 이 인터페이스가 구현되어 있다. interface Iterator { operator fun next() : T operator fun hasNext() : Boolean } next는 다음 값을 반환하고, hasNext는 값이 있는지 없는지 판단하여 Boolean으로 리턴한다. 예시를 보자. package iteratorEx fun main() { val range : IntRange = 1..3 val iter : Iterator = range.iterator() println(iter.hasNext()) println(iter.next()) println(iter.hasNext()) println(iter.next()) prin.. 2020. 12. 11.
Kotlin] 35. .. 연산자 .. 연산자는 범위를 표현하는 연산자이다. 자바는 1~10까지 연산을 표현하려면 (x>0 && x 2020. 12. 11.
Kotlin] 34. 제네릭 상속(in/out) Int는 Any를 상속한다. 그럼, AAA는 AAA를 상속할까? 아니다. 이 Int는 Any를 상속하지만, 이것이 제네릭이 되는 순간 이 둘은 별개의 값이 된다. 이것을 어떻게 상속할 수 있을까? 이것을 해결해줄 키워드가 in/out이다. package inOutEx class AAA class BBB fun main() { val aaaSub = AAA() val aaaSuper : AAA = aaaSub val bbbSub = BBB() val bbbSuper : BBB = bbbSub val star : AAA = aaaSub } out 키워드는 슈퍼 클래스에 서브 클래스를 대입할 수 있게 해주고, in 키워드는 서브 클래스에 슈퍼 클래스를 대입할 수 있게 해준다. 2020. 12. 11.
Kotlin] 33. 타입 매개변수 비교하기(reified) 이전에 instanceof와 유사한 함수로 is 키워드를 쓴다고 했다. 그런데, 제네릭에서 타입을 비교하려고 코드를 쓰면.. T에서 컴파일 오류가 발생한다. 무슨 오류인가.. 보면 지워진 유형에 대해서 검사할 수 없다고 하는데, 이건 JVM 때문이다. JVM이 제네릭으로 선언된 일반 유형을 다 지워버리기 때문에, JVM에게 지우지 말라고 요청을 드려야 한다. 그 명령어가 reified이다. 이걸 제네릭 타입 T 앞에 붙여준다. package refineEx inline fun check() { val number = 0 if (number is T) { println("T는 Int 타입입니다") } } fun main() { check() } 결과 : T는 Int 타입입니다 2020. 12. 11.
반응형