JAVA

[JAVA] 오버로딩/Overloading

minsukim.kms 2022. 7. 26. 13:38

메서드 오버로딩

  • 같은 이름의 메서드를 여러개 정의하는 것
  • 오버로딩을 사용함으로서 메서드에 사용되는 이름을 절약할 수 있다.
  • 메서드를 호출할 때 전달해야할 매개변수 타입이나 개수에 대해 신경 쓰지 않고 호출할 수 있다.

(자바에서는 한 클래스 내에 같은 이름의 메서드를 둘 이상 가질 수 없다.

하지만, 매개변수의 개수나 타입을 다르게 하면 하나의 이름으로 메서드를 작성할 수 있다.)

 

오버로딩 성립조건

  1. 메서드 이름이 같아야 한다
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 자료형과는 같아야 한다.

 

 

올바른 예제 )

class overloading
{
	int sum(int x, int y) {
		return x+y;
	}
    
	//매서드 오버로딩
	int sum(int x, int y, int z) {
		return x + y + z;
	}
	int sum(int x, int y, int z, int k) {
		return x + y + z + k;
	}	
}
public class MethodOverloading {
	public static void main(String[] args) {
        overloading ob = new overloading();
        System.out.println("sum(int x, int y) : "+ob.sum(10, 20));
        System.out.println("sum(int x, int y, int z) : "+ob.sum(10, 20, 30));
        System.out.println("sum(int x, int y, int z, int k) : "+ob.sum(10, 20, 30, 40));
		//하나의 변수를 가지고 여러 결과를 낼 수 있음.
	}

}

매서드 이름이 같고, 매개변수가 다르게 하여 오버로딩 하였다.

오버로딩으로 인해 메인 메서드에서 같은 이름의 메서드를 가지고 매개변수 개수를 다르게 하여 호출 가능하다.

 

결과 ) 

sum(int x, int y) : 30
sum(int x, int y, int z) : 60
sum(int x, int y, int z, int k) : 100

 

 

 

틀린 오버로딩 예제 )

class NotOverloading
{
    int sum(int x, int y) {
        return x+y;
    }
    
	//매서드 오버로딩x
    double sum(double x , double y) { 
        return x + y;
    }
    double sum(int x, double y, float z) { 
        return x + y + z;
    }
    String sum(String str1,String str2) { 
        return str1 + str2;
    }	
}

반환 타입이 다르기 때문에 모두 오버로딩이 성립되지 않는다.

 

 

 

 

Car 예제  )

Car 클래스에서 여러 속성을 가진 Car를 출력할 수 있도록 오버로딩 하기

class Car{
    //속성
    public String owner;
    public int speed;
    public int fuel;
    public String cupholder1;
    public String cupholder2;
	
    //오버로딩
    void AddCupholder(String b1) {
        this.cupholder1=b1;
    }
    void AddCupholder(String b1,String b2) {
        this.cupholder1=b1;
        this.cupholder2=b2;
    }
	
    void ShowInfo() {
    System.out.println("소유자 : " + owner);
    System.out.println("현재속도 : " + speed + "km/h");
    System.out.println("연료량 : " + fuel);
    System.out.println("CUP1 : " + cupholder1);
    System.out.println("CUP2 : " + cupholder2);
	}
}

public class CarMain {
	public static void main(String[] args) {
        Car hong = new Car();
        hong.owner = "홍길동";
        hong.speed = 50;
        hong.fuel = 100;
        //hong.AddCupholder("식혜"); 
        //오버로딩을 함으로서 바로 위 코드를 통해 식혜 만을 입력해도 되고, 
        //아래의 코드로 식혜와 아아 둘 다 입력해도됨.
        hong.AddCupholder("식혜","아아");
        hong.ShowInfo();

기능 추가(함수 오버로딩)
AddCupholder(String b1) : void  >  멤버변수 cupholder1에 b1 문자열 저장
AddCupholder(String b1,String b2) : void  >  멤버변수 cupholder1,2에 각각 b1,b2 저장
ShowInfo():void : owner,speed,fuel,cupholder1,cupholder2를 각각 출력하는 메서드 생성

 

 

결과 )

소유자 : 홍길동
현재속도 : 50km/h
연료량 : 100
CUP1 : 식혜
CUP2 : 아아

 

 

 

 

 

 

참고 사이트 : tcpschool.com