For Programmer
13. 코틀린 - 제네릭 과 다형성 본문
728x90
안드로이드를 개발하면서 제네릭을 사용하는 경우는 흔치않다. 하지만 안드로이드 개발할 때 사용하는 메서드들을 보면 웬만하면 다 제네릭으로 구현되어 있다. 따라서 제네릭으로 구현된 코드를 읽을 수 있어야 한다.
간단한 제네릭 사용법이다.
//제너릭을 사용하지 않은 경우
//형 변환을 해줘야 한다.
val list1 = listOf(1, 2, "가")
val b: String = list1[2].toString() //형변환(타입변환)
//제너릭을 사용하는 경우
val list2 = listOf<String>("a", "b", "c")
val c: String = list2[2] //String이라는것을 보장받는다.
//제너릭을 사용하지 않은 경우
val list5 = listOf(1, 2, 3, "가") // -> Any타입으로 지정됨(float,Int,String 등의 부모)
제네릭을 사용하여 간단한 클래스를 만들어 보면 다음과 같다.
class Box<T>(t: T) {
var value = t
}
fun main(args: Array<String>) {
val box:Box<Int> = Box<Int>(1)
println(box.value) // 1출력
}
제네릭을 사용하여 Number를 상속받는 모든 형을 받아 두 수의 합을 만드는 메소드를 만들어 보았다.
fun <T: Number> _gSum(x:T,y:T): T { //Number형을 상속하는 자료형만 받겠다는 의미(T를 Number형으로 선언)
return (x.toDouble() + y.toDouble()) as T //가장 큰 double형태로 변경후 + 실행 후 T형으로 캐스팅
}
println(_gSum(1,2)) // 3출력
다형성이란 부모의 자료형에 자식의 자료형이 대입될 수 있는것을 이용한 프로그래밍을 의미한다.
fun main(array: Array<String>){
val a = eval2(Sum2(Sum2(Num2(1),Num2(2)),Num2(4)))
println(a) // 7 출력
}
interface Expr2 //다형성 구현을 위해 사용될 부모 expr 인터페이스
class Num2(val value:Int):Expr2 //expr 상속함으로써 다형성 장착 완료
class Sum2(val left:Expr2,val right:Expr2):Expr2 //expr 상속함으로써 다형성 장착 완료
fun eval2(e:Expr2):Int{
if(e is Num2){
val n = e
return n.value
}
if(e is Sum2){
return eval2(e.left) + eval2(e.right)
}
throw Exception("Unknown expression")
}
-> 간단한 덧셈출력 프로그램을 다형성을 이용하여 구성하였다. Expr2 라는 인터페이스를 Num2와Sum2가 상속받아서 eval2라는 메소드안에서 덧셈을 수행해준다. 이처럼 다형성은 안드로이드 앱을 만드는데 있어서 + 객체지향형 프로그래밍에 있어서 가장 중요한 개념이다.
728x90
'Programming language > Kotlin' 카테고리의 다른 글
12. 코틀린 - 인터페이스 (0) | 2021.08.25 |
---|---|
11. 코틀린 - 상속 (0) | 2021.08.25 |
12. 코틀린 - 변수와 접근제어자 (1) | 2021.08.25 |
11. 코틀린 - 세터(setter)와 게터(getter) (0) | 2021.08.25 |
10. 코틀린 - Class(클래스) (0) | 2021.08.24 |
Comments