
가끔 코드를 작성하다가 용도는 다르지만 같은 이름의 메서드, 생성자들이 필요할 때가 있다.
그렇다고 인위적으로 다른 이름을 지어주자니 애매할 때!
필요한게 오버로딩이다.
오버로딩을 하면 같은 이름으로 생성자, 메서드를 만들 수 있다.
하지만 아래 조건은 지켜야한다.
1. 메서드, 생성자 명은 같아야한다.
2. 매개변수의 개수 또는 타입 중 하나는 달라야한다.
3. 매개변수는 같고 리턴타입만 다른 경우는 오버로딩에 해당하지 않는다.
public class Overload {
String name;
double age;
Gender gender;
public Overload(String name, double age, Gender gender){
this.name = name;
this.age = age;
this.gender = gender;
}
public Overload(){
this("NULL",0, Gender.NULL);
}
public void myPet(){
String name=this.name.toLowerCase();
double age = Math.floor(this.age);
System.out.println("----------------------");
System.out.println("Name : "+ name);
System.out.println("Age : " + age);
System.out.println("Gender : " + gender);
}
enum Gender{
MALE, FEMALE, NEUTRALITY,NULL;
}
}
생성자 Overload 를 먼저 살펴보자.
Overload 가 3개의 파라미터(매개변수)를 받는 경우에는 값을 this 로 연결해 두었다.
반면 Overload 가 0개의 파라미터를 받는 경우에는 반려동물을 기르지 않는다고 인식하고 이름, 성별은 NULL 을, 나이는 0을 반환하게 시켰다.
아래처럼 생성자에도 this 를 쓴 이유는 위에 파라미터를 세 개 가지는 Overload와 겹치기 때문이다.
this.("Null", 0, Gender.NULL);
위처럼 써주면 실행될 때 파라미터의 타입과 개수가 매치되는 생성자를 찾아서 실행해준다.
아래는 메인이다.
public class OverloadExam {
public static void main(String[] args) {
Overload aboutPet1 = new Overload("PEPE",4.5, Overload.Gender.FEMALE);
Overload aboutPet2 = new Overload();
aboutPet1.myPet();
aboutPet2.myPet();
}
}

지금까지 생성자에 대한 오버로딩을 다뤘지만 메서드도 크게 다르지 않다.
간단하게 정수 두 개, 세 개를 더하는 메소드와 문자열을 더하는 메소드를 만들어 보았다.
public class MethodOverloading {
int a;
int b;
int c;
String str1;
String str2;
public void add(int a, int b){
this.a=a;
this.b=b;
System.out.println(a+b);
}
public void add(int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
System.out.println(a+b+c);
}
public void add(String str1, String str2){
this.str1=str1;
this.str2=str2;
System.out.println(str1 + str2);
}
}
public class MethodOverloadingExam {
public static void main(String[] args) {
int a=10;
int b=6;
int c=20;
String str1="hi";
String str2="Good to see you";
MethodOverloading overloading=new MethodOverloading();
overloading.add(a,b);
overloading.add(a,b,c);
overloading.add(str1,str2);
}
}
