kotlin

코틀린: Generic

ChloeLee 2020. 10. 21. 21:20

데이터의 자료형을 동적으로 지정

 

동일한 알고리즘을 사용하는 메소드를 여러번 구현하는 것은 자원의 낭비

하나의 메소드만 구현해놓고 실행 될 때 자료형을 결정해서 코드를 완성하고 실행하기 위한 개념

 

fun add(a : Int, b : Int ) : Int {

    return a + b

}

 

fun add(a : Double, b : Double ) : Double {

    return a + b

}

 

=> Any 로 만들어진 자료형은 어떤 종류의 데이터든지 전부 대입이 가능

fun add(a : Any, b: Any ) : Any {

    return a + b

}

 

 

템플릿으로 해결

fun add(a : <V>, b : <V>) : <V> {

    return a + b

}

 

미지정 자료형에 Int 를 넣어주세요

add<int>(10, 20)

add<Double>(10, 20)

 

List<T> : 인스턴스를 생성 할 때 자료형을 결정할 수 있습니다.

자료형을 결정하지 않으면 Any 가 됩니다.

 

var list1 = listOf("Hello", "World") // 자료형을 결정하지 않으면 내부 데이터는 Any

var list2 = listOf<String>("Hello", "World") // 내부 데이터는 String 이기에  Parameter로 1 넣으면 Error

 

list1.get(0) -> Any

list2.get(0) -> String

 

String 클래스에 있는 toUpperCase 라는 메소드를 호출하려는 경우

(list1.get(0) as String)).toUpperCase()

list2.get(0).toUpperCase()

 

Generic 이 사용되는 대표적인 클래스들은 자료구조 클래스들입니다.

Array, List, Set, Map 

 

Unit 과 Nothing 

함수의 리턴 타입으로 사용 되는 Unit은 리턴 되는 자료가 없다 라는 자료형

Nothing 은 리턴 되는 것이 없다

 

Unit 은 출력이 가능합니다. Unit 이라고 출력이 됩니다.

Nothing 은 출력 안됨. 

 

typealias

자료형에 별명을 붙이는 것!!

 

typealias 별명 = 실제 자료형

typealias D = Double 

=> Double은 D 라고 해도 됩니다.

 

SAM (Single Abstract Method)

=> 하나의 추상메소드를 가진 자바의 인터페이스를 쉽게 사용하기 위한 문법

람다 표현식으로 표현이 가능합니다.

 

interface Runnable {

    run()

}

 

Thread(runnable : Runnable) - Thread 클래스의 생성자

 

var th : Thread = Thread(Runnable()) // 에러

 

var th : Thread = Thread(Runnable(){

   fun run(){내용}

}) // 필요한 메소드 전부 구현

 

var th : Thread = Thread({매개변수 -> 코드작성}) // 메소드가 1 개인 경우만 가능