[23강] https://youtu.be/_hpLoC6ymao
1. 함수의 기본성질 : Overloading
함수의 이름이 다르면 다른 함수이다.
함수의 전달인자 타입이 다르면 다른 함수이다.
함수의 전달인자 갯수가 다르면 다른 함수이다.
함수의 전달 순서가 다르면 다른 함수이다.
즉, 함수의 이름과 절달인자의 갯수와 타입이 정확하게 일치해야 같은 함수이다. (단, 인자명은 다를 수 있다.)
만약, 함수의 이름만 같고, 이외의 것들이 다 다르면 Overloading이라고 하고,
왜? 프로그래머가 작업(기억)하기 좋게 하기 위한 방편
fun main() {
myFunc(1)
myFunc("ABC")
myFunc(1, "ABC")
myFunc("ABC", 1)
}
fun myFunc(x : Int){
println("myFunc : " + x)
}
fun myFunc(x : String) {
println("myFun2 : " + x)
}
fun myFunc(x : Int, y : String) {
println("myFun2 : " + x + y)
}
fun myFunc(x : String, y : Int) {
println("myFun2 : " + x + y)
}
myFunc : 1
myFun2 : ABC
myFun2 : 1ABC
myFun2 : ABC1
2. Default Values
fun main() {
myFunc(1, 2, 3) // 1, 2, 3
myFunc(1, 2) // 1, 2, 30
myFunc(1) // 1, 20, 30
myFunc(1, z = 3) // 1, 20, 3
}
fun myFunc(x : Int, y : Int = 20, z : Int = 30) {
println("x : $x, y : $y, z : $z")
}
x : 1, y : 2, z : 3
x : 1, y : 2, z : 30
x : 1, y : 20, z : 30
x : 1, y : 20, z : 3
3. 가변인자
가변인자는 함수의 입력 값을 무제한(하드웨어가 지원하는 만큼) 입력받을 수 있도록 도와주는 문법으로, 다른 고정 입력인자와 혼용해서 사용할 경우 반드시 맨 마지막에 호출되도록 해야합니다.
fun main() {
myFunc("1행", 1, 2)
myFunc("2행", 1, 2, 3)
myFunc("3행", 2, 3, 4, 5, 6)
}
fun myFunc(str : String, vararg numbers : Int) {
var sum = 0
print(str + " > ")
for(i in numbers) {
if(sum != 0)
print(" + ")
print(i)
sum += i
}
println(" = " + sum)
}
1행 > 1 + 2 = 3
2행 > 1 + 2 + 3 = 6
3행 > 2 + 3 + 4 + 5 + 6 = 20
4. infix
fun main() {
println(6 multiply 4)
}
infix fun Int.multiply(x: Int) : Int = this * x
24
4-2. class에서 infix예시
fun main() {
var a = A("Class A.")
var b = B("Class B.")
println("1 : " + a.str)
a concat b
println("2 : " + a.str)
a concat(b)
println("3 : " + a.str)
}
infix fun A.concat(b : B) {this.str += b.str}
class A(var str : String) {}
class B(var str : String) {}
1 : Class A.
2 : Class A.Class B.
3 : Class A.Class B.Class B.
4-3. class 내부에서 사용 예시
fun main() {
var a = A("Class A.")
var b = B("Class B.")
println("1 : " + a.str)
a concat b
println("2 : " + a.str)
a concat(b)
println("3 : " + a.str)
}
class A(var str : String) {
infix fun concat(b : B) {str += b.str}
}
class B(var str : String) {}
1 : Class A.
2 : Class A.Class B.
3 : Class A.Class B.Class B.
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 25강. Data / Enum (0) | 2022.05.03 |
---|---|
[Youtube DiMo] 24강. 내부클래스 (0) | 2022.04.30 |
[Youtube DiMo] 22강. Null (0) | 2022.04.29 |
[Youtube DiMo] 21강. 문자열 (0) | 2022.04.29 |
[Youtube DiMo] 20강. 리스트 (0) | 2022.04.29 |
댓글