[19강] https://youtu.be/fhunk_9LOOQ
1. 함수단위의 제네릭(Generic)
제네릭은 함수는 입력 타입을 유동적으로 변경해주는 효과가 있습니다.
아래 처럼 여러타입을 각각 만들어 줄 필요가 없습니다.
문법 :
fun <제네릭기호> 함수명(인자들 : 제네릭기호) {바디}
fun main() {
log("my")
log(1)
log('가')
log(3.14)
}
fun <T> log(a:T){
println(a)
}
fun logInt(a:Int) {}
fun logFloat(a:Float) {}
fun logString(a:String) {}
fun logChar(a:Char) {}
my
1
가
3.14
1-2. Overload
Overload기법을 이용하여, 한개로 만든 것 처럼 할 수도 있습니다.
※ 주의 : 덧셈 연산은 오로지 숫자에 정의되어 있고, 인위적으로 만든 사용자타입은 연산자 재정의를 통해서만 정의될 수 있으므로, 아래 함수는 제네릭으로 구현해도 에러가 발생합니다.
fun main() {
println(add(1,2))
println(add(3L, 4L))
println(add(3.14, 9.8))
}
fun add(a:Int, b:Int) :Int {return a+b}
fun add(a:Long, b:Long) :Long {return a+b}
fun add(a:Double, b:Double) :Double {return a+b}
3
7
12.940000000000001
2. 클래스와 제네릭
문법 :
class 클래스명 <제네릭문자 : 최상위클래스>(속성들) {바디}
최상위 클래스를 작성하는 것은 선택사항이지만, 해당 클래스에서 어떠한 함수(메서드)를 사용하고자 할 때, 최소한으로 만족하는 기능을 미리 명시해야 (당연하게도) 사용중에 해당 기능을 사용 할 수 있을 것입니다.
fun main() {
var a = A("김개똥")
var b = B("홍길동")
var c = C("임꺽정")
Generic(a).introduce()
Generic(b).introduce()
Generic(c).introduce()
}
open class A(var name : String) {
open fun whoAmI() { println("A : $name") }
}
class B(name : String) : A(name) {
override fun whoAmI() { println("B : $name") }
}
class C(name : String) : A(name) {
override fun whoAmI() { println("C : $name") }
}
class Generic<T : A>(var t : T) {
fun introduce() { t.whoAmI() }
}
A : 김개똥
B : 홍길동
C : 임꺽정'코틀린' 카테고리의 다른 글
| [Youtube DiMo] 21강. 문자열 (0) | 2022.04.29 |
|---|---|
| [Youtube DiMo] 20강. 리스트 (0) | 2022.04.29 |
| [Youtube DiMo] 18강. 다형성 (0) | 2022.04.29 |
| [Youtube DiMo] 17강. 익명객체와 옵저버 패턴 (0) | 2022.04.29 |
| [Youtube DiMo] 16강. Object (0) | 2022.04.29 |
댓글