코틀린

[Youtube DiMo] 19강. 제네릭

iseohyun 2022. 4. 29.

목차

    [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

    댓글