본문 바로가기
Programming/Kotlin

[Kotlin] 코틀린 뽀개기 - Generic 사용하기

by 코딩의성지 2019. 12. 6.

안녕 ~~~ 여러분 !!

 

java에서 혹시 Generic을 사용해 보신 분 있을 지 모르겠다 !

 

오늘은 코틀린에서도 지원이 되는 Generic 에 대해 공부를 할 예정이다.

 

Generic

 

Generic은 파라미터의 타입이나 리턴타입을 유동적으로 사용하고 싶을 때 쓰면된다. 

보통 JAVA 도큐먼트 같은거 보면 제네릭이 굉장히 많이 표현되어 있다.

 

만약 여러분이 제네릭을 사용한다면, 컴파일 시에 타입 에러가 나는걸 미리 체크할 수 있을 것이고 불필요한 타입변환을 막을 수 있는 장점이 있다. ㅎㅎ 여러모로 많이 사용되니 이번에 확실하게 공부해 두자.

 

아래 예시를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
fun main(args : Array<String>) {
    var temp1 = GenericClass1<Int>()
    temp1.genericMethod(7)
 
    var temp2 = GenericClass1<String>()
    temp2.genericMethod("바보")
 
    var temp3 = GenericClass2(99)
    temp3.genericMethod1()
    var intVar = temp3.genericMethod2()
    println("intVar : " + intVar)
 
    var temp4 = GenericClass2("은행원")
    temp4.genericMethod1()
    var strVar = temp4.genericMethod2()
    println("strVar : " + strVar)
 
    var temp5 = GenericClass3<StringInt>()
    temp5.genericMethod("하이",1000)
 
    var temp6 = GenericClass3<Int, Double>()
    temp6.genericMethod(9,9.99)
 
    var temp7 = GenericClass4<StringString>("천사","악마")
    temp7.genericMethod()
 
    var temp8 = GenericClass4<Int, Double>(1,0.5)
    temp8.genericMethod()
}
 
// T 타입의 파라미터를 사용하는 Generic class
class GenericClass1<T> {
    fun genericMethod(genericParameter : T) {
        println("genericParameter : ${genericParameter}")
    }
 
 
}
 
// T 타입의 변수를 가진 default 생성자를 가진 Generic class
// 리턴 타입도 정해줄 수 있다.
class GenericClass2<T>(genericVar: T) {
    var genericVar = genericVar;
 
    fun genericMethod1() {
        println("genericVar : ${genericVar}")
    }
 
    fun genericMethod2(): T {
        return genericVar
    }
}
 
// T1, T2 타입의 파라미터를 사용하는 Generic class
class GenericClass3<T1, T2> {
    fun genericMethod(genericParameter1 : T1, genericParameter2: T2) {
        println("genericParameter1 : ${genericParameter1}")
        println("genericParameter2 : ${genericParameter2}")
    }
}
 
//T1, T2 타입의 변수를 가진 default 생성자를 가진 Generic class
class GenericClass4<T1, T2> (genericVar1: T1, genericVar2: T2) {
    var genericVar1 = genericVar1;
    var genericVar2 = genericVar2;
 
    fun genericMethod() {
        println("genericVar1 : ${genericVar1}")
        println("genericVar2 : ${genericVar2}")
    }
}
 

위의 예제는 Generic을 이용하는 여러 예제를 만들어 뒀다.

GenericClass1 은 메서드의 파라미터 타입을 Generic 으로 지정해 준 예제이다.

 

GenericClass2 는 T1 타입의 디폴트 생성자를 설정한 예제이고, 메서드의 리턴타입도 Generic으로 해준 예제이다.

 

GenericClass3 은 메서드의 파라미터를 복수로 Generic으로 설정해준 예제이고,

 

GenericClass4 는 T1, T2 타입의 복수의 파라미터를 가지는 생성자를 설정한 예제이다.

 

소스를 차분하게 보면 그리 어렵지는 않을 것이다. ㅎㅎㅎ

 

위의 소스를 실행해 보면 다음과 같은 결과가 나온다.

 

매번 내가 여러분에게 말씀드리는게 있다..! 백견이 불여일타 !!

보는 것보다는 코딩해보는게 중요한 것같다. 꼭 코딩해보시길 권한다.

 

그럼 오늘도 즐코 하자 !! 안녕 ~~

반응형

댓글