확장함수

등장배경

fun String.lastChar() : Char { // 수신객체 타입 : String, 수신 객체를 this로 접근
	return this.[this.length - 1]
}

val str : String = "ABC"
str.lastChar()

같은 이름의 확장함수

//Java
public class Person {
//.....

	public int nextYear(){
		println("멤버함수")
		return this.age + 1;
	}
	
//////////////
//Kotlin
fun Person.nextYear(){
	println("확장함수")
	return this.age + 1;
}

//////////////
//result
// "멤버함수"

확장함수의 오버라이드

image.png

open class Train {

	fun Train.IsExpensive(){
		println("train")
	}
}

class Srt : Train("SRT", 10000)

fun Srt.IsExpensive(){
	println("SRT")
}

val train : Train = Train()
train.IsExpensive() // result : "train"

val srt1 : Train = Srt()
srt1.IsExpensive() // result : "train"

val srt2 : Srt = Srt()
srt2.IsExpensive() // result : "SRT"