확장 바카라 가상 머니 사이트는 [확장을 하려는 대상.바카라 가상 머니 사이트]로 만들 수 있다고 하였습니다. 여기서바카라 가상 머니 사이트는 일반 바카라 가상 머니 사이트의 형태입니다.
[Remind] 바카라 가상 머니 사이트의 기본 형태
fun 바카라 가상 머니 사이트명(변수): Unit {
}
or
fun 바카라 가상 머니 사이트명(변수): 리턴타입 {
return 값
}
여기에서 '확장을 하려는 대상'을 추가해주면 확장 바카라 가상 머니 사이트가 됩니다. 엄밀히 말하자면 '확장하려는 대상'에 바카라 가상 머니 사이트를 추가해주는 것이겠죠.
fun확장하려는 대상.바카라 가상 머니 사이트명(변수): Unit {
}
or
fun확장하려는 대상.바카라 가상 머니 사이트명(변수): 리턴타입 {
return 값
}
앞서 직접 만든 Car 클래스를 '확장하려는 대상(receiver type)'으로 확장 바카라 가상 머니 사이트를 만들어 봤습니다. 그런데 Basic Type을 이용하면 좀 더 재미있는 일을 할 수 있을 것 같습니다. Basic Type은 Int, Double, Byte와 같은 Number를 비롯에 Boolean, Array, String까지 다양합니다.
예를 들어 String의 길이를 비교하여 길이가 더 긴 String을 리턴 받는 확장 바카라 가상 머니 사이트를 만들어 사용할 수 있습니다.
fun main(args: Array<String) {
println("Hello".getLonggerString("Hi"))
}
funString.getLonggerString(x: String) : String {
return if(this.length x.length) this else x
}
Hello
예제를 분석해보면 확장 바카라 가상 머니 사이트를 사용할 때의 형태가 보입니다.
"Hello".getLonggerString("Hi")
↓
확장을 하려는 대상.확장 바카라 가상 머니 사이트명(확장 바카라 가상 머니 사이트 파라미터 타입)
↓
String.getLonggerString(String)
여기서는 확장을 하려는 대상, 즉 receiver type이 String이고 확장 바카라 가상 머니 사이트명은 getLonggerString 그리고 파라미터 타입은 String입니다.
곧이곧대로 사용하면 재미없으니 이걸 약간 변형시켜 응용해볼까요?
fun main(args: Array<String) {
println("Hello".getLonggerLength(3))
}
fun String.getLonggerLength(x: Int) : Int {
return if(this.length x) this.length else x
}
5
이번엔 String인 Hello의 길이와 3을 비교하여 큰 수를 리턴 받습니다. 확장 바카라 가상 머니 사이트의 리턴타입과 파라미터 타입을 변경한 것입니다. 그러면 파라미터 타입은 String으로 유지한 채 두 String 중 길이가 더 긴 String의 length를 리턴 받는 확장 바카라 가상 머니 사이트도 만들 수 있겠죠? 또 파라미터 2개를 받아서 뭔가를 할 수도 있을 것입니다. 한 번 생각해보시면 좋을 것 같습니다.
중위 표기법 (Infix notation)
바카라 가상 머니 사이트는 중위 표기법을 사용해서 호출될 수 있습니다. 이때 세 가지 조건이 있습니다.
1. 멤버 바카라 가상 머니 사이트 또는 확장 바카라 가상 머니 사이트여야 한다.
2. 하나의 파라미터를 가져야 한다.
3. infix 키워드를 사용해야 한다.
그럼 '두 String 중 길이가 더 긴 String의 length를 리턴 받는 확장 바카라 가상 머니 사이트'를 이참에 한 번 만들어 보겠습니다.
fun main(args: Array<String) {
println("Hello".getLonggerStringLength("Have a nice day!"))
}
fun String.getLonggerStringLength(x: String) : Int {
"Hello".getLonggerStringLength("Have a nice day!")
"Hello" getLonggerStringLength "Have a nice day!"
기본 형태로 보면 좀 더 간결합니다.
.(dot) 대신에 공백 그리고 바카라 가상 머니 사이트명 다음에 공백을 추가하고 파라미터의 괄호가 사라졌습니다.
receiverType.바카라 가상 머니 사이트명(파라미터)
↓
receiverType 바카라 가상 머니 사이트명 파라미터
확장 바카라 가상 머니 사이트 vs 멤버 바카라 가상 머니 사이트
클래스가 멤버 바카라 가상 머니 사이트를 가지고 동일한 receiver type과 동일한 이름으로 정의된 확장 바카라 가상 머니 사이트가 있으면 멤버 바카라 가상 머니 사이트가 항상 우선입니다.
아래 예제를 보면 Car 클래스 내에 getPrice라는 멤버 바카라 가상 머니 사이트가 존재하고 receiver type으로 Car를 사용한 getPrice라는 확장 바카라 가상 머니 사이트가 있습니다. 이 경우 getPrice를 호출하면 멤버 바카라 가상 머니 사이트가 우선적으로 호출이 됩니다.
fun main(args: Array<String) {
val car = Car()
println(car.getPrice())
}
classCar{
fungetPrice(): Int {
return 10000
}
}
funCar.getPrice(): Int {
return 20000
}
10000
하지만 바카라 가상 머니 사이트 이름이 같아도 멤버 바카라 가상 머니 사이트를 overload 한 확장 바카라 가상 머니 사이트는 확장 바카라 가상 머니 사이트가 호출이 됩니다.