코틀린 함수 코드를 작성하다 보면 기존 자바코드에 비해 확실히 편해진 부분 중 하나가
'함수의 디폴트 파라미터 값'을 지원한다는 점
함수의 기본값 설정이 어떤 것인지 이해하기 위해 먼저 자바에서 함수 파라미터의 기본값이 필요한 경우를 생각해봅시다
토스트 관련 함수 '파라미터에 따라' 짧거나 길게 보여주기 윟 다음 함수를 설계 했습니다
ToastUtilJava.java
package com.example.kotlinsample;
import android.widget.Toast;
public class ToastUtilJava {
// 짧은 토스트 메세지를 보여주는 함수
public static void toastShort(String message) {
Toast.makeText(MainApplication.getAppContext(), message, Toast.LENGTH_SHORT).show();
}
// 긴 토스트 메세지를 보여주는 함수
public static void toastLong(String message) {
Toast.makeText(MainApplication.getAppContext(), message, Toast.LENGTH_LONG).show();
}
// 파라미터에 따라 긴 토스트 메세지, 또는 짧은 토스트 메세지를 보여준다
public static void toast(String message, int length){
Toast.makeText(MainApplication.getAppContext(), message, length).show();
}
}
새로 추가된 toast() 함수를 사용하려면 다음과 같이 사용하면 됩니다
ToastUtilJava.toast("" + number + " 는 2의 배수입니다.", Toast.LENGTH_SHORT);
toast() 함수는 String 타입의 메세지를 전달 받은 '길이'를 기준으로 짧거나 길게 보여줍니다
그런데 막상 프로젝트를 진행하다 보면 Toast 메세지를 길게 쓰는 경우는 1% 정도밖에 되지 않습니다
호출 시 99%는 'Toast.LENGTH_SHORT'가 넘어올 것 입니다
함수를 사용하는 코드는 매번 'Toast.LENGTH_SHORT'를 넘겨야 해서 불편할 뿐만 아닌
자칫 실수로 잘못된 값을 넘길 수도 있죠
이런 경우 '파라미터의 기본값'이 정해져 있으면
사용힉 더 편리한 함수를 만들 수 있겟죠?
다만 자바에서는 함수 파라미터의 기본값을 제공하지는 않기 때문에 '메소드 오버로딩'으로 문제를 해결 합니다
ToastUtilJava.java
package com.example.kotlinsample;
import android.widget.Toast;
public class ToastUtilJava {
// 짧은 토스트 메세지를 보여주는 함수
public static void toastShort(String message) {
Toast.makeText(MainApplication.getAppContext(), message, Toast.LENGTH_SHORT).show();
}
// 긴 토스트 메세지를 보여주는 함수
public static void toastLong(String message) {
Toast.makeText(MainApplication.getAppContext(), message, Toast.LENGTH_LONG).show();
}
// 파라미터에 따라 긴 토스트 메세지, 또는 짧은 토스트 메세지를 보여준다
public static void toast(String message, int length){
Toast.makeText(MainApplication.getAppContext(), message, length).show();
}
// 파라미터의 기본값을 사용하기 위해 메소드 오버라이딩
public static void toast(String message){
toast(message, Toast.LENGTH_SHORT)''
}
}
코드 중 메소드 오버로딩된 부분이 보이시나요?
오버로딩 된 toast() 함수는 파라미터로 'message'만 받습니다
함수가 호출되면 파라미터로 받은 message와 기본값이 되어야 할 'length'는 자주 사용하는
'Toast.LENGTH_SHORT'를 사용하여 원래의 toast() 함수로 패스해 버립니다
이제 이 함수를 다른 클래스에서는 2가지 방법으로 사용이 가능 합니다
ToastUtilJava.toast("" + number + " 는 2의 배수입니다.", Toast.LENGTH_LONG);
ToastUtilJava.toast("" + number + " 는 2의 배수입니다.");
2번째 파라미터를 전달하지 않으면 자동 99%가 사용하는 '짧은 토스트 메세지'가 화면에 보이고
필요한 경우만 2번째 파라미터를 전달할 수 있는 것이죠
이 방법은 동작은 잘되지만 상당히 불편합니다
지금은 파라미터가 2개이지만 파라미터가 5개, 6개라면?
파라미터가 5개인데 그 중 4개가 거의 같은 파라미터 값을 사용한다고 생각해보세요
// 파라미터가 5개인 함수, 이중 param2 ~ param5 가 거의 같은 값을 사용한다면?
public static void function(int param1, int param2, int param3, int param4, int param5) {
}
// param5의 기본값을 지정한 함수
public static void function(int param1, int param2, int param3, int param4) {
function(param1, param2, param3, param4, 5);
}
// param4 ~ param5 의 기본값을 지정한 함수
public static void function(int param1, int param2, int param3) {
function(param1, param2, param3, 4, 5);
}
// param3 ~ param5 의 기본값을 지정한 함수
public static void function(int param1, int param2) {
function(param1, param2, 3, 4, 5);
}
// param2 ~ param5 의 기본값을 지정한 함수
public static void function(int param1) {
function(param1, 2, 3, 4, 5);
}
함수 파라미터의 기본값을 지정하기 위해 같은 메소드가 4번 오버라이딩 되었죠!
코드의 양도 상당히 많고 코틀린은 이런 문제점을 '파라미터의 기본값'을 지원함으로 해결 합니다!
'개발일지' 카테고리의 다른 글
자바(Java)/코틀린(Kotlin) 개별 테스트 케이스 (1) | 2024.12.07 |
---|---|
코틀린(Kotlin) 함수의 디폴트 파라미터 (0) | 2024.12.06 |
자바(Java)에서 코틀린(Kotlin) 최상위 함수 사용 (0) | 2024.12.04 |
Kotlin의 최상위 함수 (1) | 2024.12.03 |
자바(Java)의 정적 유틸리티 클래스 (1) | 2024.11.30 |