본문 바로가기

분류 전체보기556

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.
Kotlin] 32. 함수 참조(Function Reference) Unit은 이미 만들어진 함수나 객체의 멤버함수를 참조할수도 있다. package functionReferenceEx fun plus(a : Int, b : Int) = println("plus calling ${a + b}") object Object { fun minus (a : Int, b : Int ) = println("Object minus calling ${a - b}") } class Class { fun average (a : Int, b : Int ) = println("class average calling ${(a+b)/2}") } fun main() { var instantFunc : (Int, Int) -> Unit instantFunc = :: plus instantFunc(3.. 2020. 12. 10.
Kotlin] 31. 함수 리터럴 Unit은 함수가 들어갈 수 있는 타입이다. package functionLiterialEx fun main() { val instantFunc : (Int)->Unit instantFunc = {number: Int -> println("Hello $number") } instantFunc(33) instantFunc?.invoke(33) } 함수 리터럴에는 익명 클래스와 람다 표현식이 있는데, 위의 예시는 람다 형태이다. (매개변수) -> 작동할 행동 으로 이루어진다. 함수 리터럴은 return을 적지 않과, 마지막 표현식의 반환 값이 반환값이 된다. 함수 타입 변수 중 null로 넘어올 가능성이 있다면 저렇게 함수만 부르는 것 보다 invoke 표현식을 이용해 nullable하게 불러오는 것이 좋다.. 2020. 12. 10.
Kotlin] 30. 데이터 클래스 클래스 중에서는 데이터만 다루는 클래스가 있다. 이 데이터 클래스 앞에 data를 붙이면 데이터를 수월하게 관리할 수 있는데, 장점도 있다. - Any 클래스 내부의 함수들이 자동으로 오버라이딩 된다. - toString을 사용하면 Employee(name=John, age=32, salary=180) .. 같이 객체 클래스명(프로퍼티 값 모음)으로 리턴된다. - copy 함수를 사용할 수 있다. 이를 이용하면 객체를 복사할 수 있다. package dataClassEx data class Employee(val name : String , val age : Int, val salary : Int) fun main() { val first = Employee("John", 32, 180) val seco.. 2020. 12. 10.
반응형