_05_MethodOverloading ( 메소드 오버로딩 )
package chap_07;
1. public class BlackBox 클래스에 아래와 같은 함수 정의.
2. 같은 함수 이름, 비슷한 동작의 코드를 별도로 작성할 때의 불편함 인식
이와 같은 코드를 위의 void record(boolean showTime, boolean showSpeed, int min) { ... } 와 별도로 정의하면 전달값이나 셋팅값, 함수 내용이 달라질 경우 일일이 찾아서 수정해야 하는 불편함이 발생한다.
함수 이름이 같다 => 비슷한 동작이 정의됨을 유추 가능
비슷한 동작을 서로 다른 코드로 별도로 작성하면 불편
같은 동작 두 번 정의 않고 새롭게 메소드 호출하면서 기본적으로 정의된 값을 던져주면
아무 값을 모른채로 호출해도 셋팅된 기본값이 적용됨.
3. 위의 불편함을 해소하기 위해 메소드 오버로딩 활용.
void record(boolean showDateTime, boolean showSpeed, int min){
System.out.println("녹화를 시작합니다.");
if(showDateTime){
System.out.println("영상에 날짜정보가 표시됩니다.");
}
if(showSpeed){
System.out.println("영상에 속도 정보가 표시됩니다.");
}
System.out.println("영상은 "+min+"분 단위로 기록됩니다.");
}
void record(){ // 이 메소드 호출시 위에 정의된 record 메소드가 호출됨.
record(true, true, 5); // 기본값 셋팅
System.out.println("녹화를 시작합니다.");
}
_05_MethodOverloading.class
package chap_07;
public class _05_MethodOverloading {
public static void main(String[] args) {
BlackBox b1=new BlackBox();
b1.modelName="까망이";
b1.record(false, false, 10);
// 녹화를 시작합니다.
// 영상은 10분 단위로 기록됩니다.
System.out.println("---------------------------");
b1.record(true, false, 3);
// 녹화를 시작합니다.
// 영상에 날짜정보가 표시됩니다.
// 영상은 3분 단위로 기록됩니다.
System.out.println("---------------------------");
b1.record();
//b1.record(true, true, 5); 와 같은 결과가 나온다.
// 녹화를 시작합니다.
// 영상에 날짜정보가 표시됩니다.
// 영상에 속도정보가 표시됩니다.
// 영상은 5분 단위로 기록됩니다.
}
}
_06_클래스 메소드
static 으로 선언한 클래스 변수는 클래스 메소드에서 직접 사용 가능.
But!! 인스턴스 변수는 객체가 만들어져야 생성되므로 static 클래스 메소드 내에서 직접 접근할 수 없다.
따라서,
1) 인스턴스 변수가 필요하지 않는 경우
또는
2) 전달받은 값만 가지고 처리를 하는 경우
인스턴스 메소드 대신에 클래스 메소드의 사용을 고려할 수 있다.
참고 : 나도코딩 자바 기본편