[JAVA] Overloading 오버로딩

고민정·2024년 4월 3일

JAVA

목록 보기
9/32


💡 Overloading

가끔 코드를 작성하다가 용도는 다르지만 같은 이름의 메서드, 생성자들이 필요할 때가 있다.
그렇다고 인위적으로 다른 이름을 지어주자니 애매할 때!
필요한게 오버로딩이다.

오버로딩을 하면 같은 이름으로 생성자, 메서드를 만들 수 있다.
하지만 아래 조건은 지켜야한다.

1. 메서드, 생성자 명은 같아야한다.
2. 매개변수의 개수 또는 타입 중 하나는 달라야한다.
3. 매개변수는 같고 리턴타입만 다른 경우는 오버로딩에 해당하지 않는다.


💡 Constructor E.g.

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();
    }
}

지금까지 생성자에 대한 오버로딩을 다뤘지만 메서드도 크게 다르지 않다.


💡 Method E.g.

간단하게 정수 두 개, 세 개를 더하는 메소드와 문자열을 더하는 메소드를 만들어 보았다.

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);

    }
}

0개의 댓글