코틀린: Generic
데이터의 자료형을 동적으로 지정
동일한 알고리즘을 사용하는 메소드를 여러번 구현하는 것은 자원의 낭비
하나의 메소드만 구현해놓고 실행 될 때 자료형을 결정해서 코드를 완성하고 실행하기 위한 개념
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 개인 경우만 가능