[Kotlin] 함수 오버로딩(Overloading), 함수 기본값(Default arguments)

Jean·2023년 8월 1일
0

7/31(월) 팀 발표 내용
팀원 : 코드비타민
발표자 : 여효진

함수 오버로딩이란?
→ 같은 함수의 이름을 가지고 있지만 파라미터(매개변수) 및 리턴 타입 등의 특징이 다른 여러 개의 함수를 만드는 것

즉, 함수 중복 정의를 뜻함

함수 오버로딩이 필요한 이유

  • 다양한 매개변수 타입을 처리 : 동일한 작업을 다양한 매개변수 타입에 대해 처리 할 수 있음. 예) 숫자를 더하는 함수를 오버로딩 하여 정수와 실수를 모두 처리
  • 매개변수 개수에 따른 다양한 동작 : 매개변수 개수에 따라 다른 동작을 수행하는 함수를 정의 할 수 있음. 예) 인자 없이 호출되는 함수와 인자를 하나, 두 개 전달하는 함수를 오버로딩하여 다양한 상황에 대응함
  • 사용자 편의성
  • 코드 가독성

But, 너무 많이 함수를 오버로딩 할 경우 코드가 복잡해지며 어떤 오버로드 함수가 호출되었는지 알기 힘들어진다

함수 오버로딩의 규칙

  1. 함수 이름은 동일해야 함
  2. 매개변수의 타입 또는 개수가 달라야함(매개변수의 이름은 달라도 상관없음)
  3. 반환 타입은 오버로딩에 영향을 주지 않음(매개변수의 타입과 개수가 동일한 함수들은 반환 타입이 다르면 안됨)

#샘플코드

fun main() {
//매개변수 수가 다른 sum함수 2개 불러옴
    sum(3, 7)
    sum(3, 5, 7)
}
//매개변수가 2개인 2개를 더하는 sum
fun sum(x:Int, y:Int){
    println(x+y)
}
//매개변수가 3개인 3개를 더하는 sum
fun sum(x:Int, y:Int, z:Int){
    println(x+y+z)
}
//결과:
10
15

#오버로딩은 리턴 값이 다른 것 만으로는 허용되지 않는다 . (매개 변수의 수나 타입이 달라야 함)

fun main() {
    println(sum(3, 7))
    println(sum(3, 7))
}
//매개 변수의 수는 같지만 리턴 타입이 다른 두 함수 
fun sum(x:Int, y:Int):Int{
    return x+y
}

fun sum(x:Int, y:Int):Double{
    return (x+y).toDouble()
}
// 오류 

#매개변수의 타입이 다른 경우 예시코드

fun main() {
    println(sum(3, 7))
    println(sum(3.0, 7.0))
}
//매개 변수의 타입도 다르고 리턴 타입도 다른 두 함수
fun sum(x:Int, y:Int):Int{
    return x+y
}

fun sum(x:Double, y:Double):Double{
    return x+y
}
//결과:
10
10.0
profile
아 왜 안돼

2개의 댓글

comment-user-thumbnail
2023년 8월 1일

헉! (๑•̀ᄆ•́๑) 코드 비타민..!
이름 넘 잘 지은거 같아요٩( ᐛ )و
파이팅이에요!٩(๑•̀o•́๑)و

1개의 답글