[Java] 4. 3 중복 정의(Overloading)

4. 3 중복 정의(Overloading)

Java 언어에서는 클래스의 멤버 메서드의 입력 매개 변수 리스트가 충분히 다르면 같은 이름으로 여러 개의 멤버 메서드를 정의할 수 있습니다. 이러한 특징을 메서드 중복 정의(Overloading)이라고 부릅니다.

예를 들어 원을 클래스로 정의합시다. 원 개체를 생성할 때는 반지름을 입력 인자로 생성하게 하고 면적을 구하는 메서드를 제공합시다. 만약 입력 인자를 전달하지 않으면 원의 넓이를 구하고 입력 인자로 각 정보를 전달하면 호의 면적을 구합니다. 이 때 입력 인자를 전달하지 않고 원의  넓이를 구하는 메서드와 각 정보를 전달하여 호의 면적을 구하는 메서드의 이름을 같은 이름으로 정의할 수 있습니다.

public double calculateArea(){

return calculateArea(3.14*2);

}

public double calculateArea(double radian){

return (radian/2.0)*radius*radius;

}

원 개체를 참조하는 변수로 calculateArea 메서드를 호출할 때 입력 인자를 전달하지 않거나 혹은 각 정보를 전달하면 적절한 메서드를 호출합니다.

circle.calculateArea(); //double calculateArea() 멤버 메서드 호출

circle.calculateArea(3.14); //double calculateArea(double radian); 멤버 메서드 호출

주의할 점은 메서드의 접근 지정자와 반환 형식은 중복 정의와 관계가 없습니다. 이는 반환 형식만 다르거나 접근 지정만 다른 메서드를 중복 정의할 수 없다는 말입니다.

[소스 4.5] calculateArea 메서드 중복 정의

public class Circle {
    double radius;
    public Circle(double radius){
        this.radius = radius;
    }
    public double calculateArea(){
        return calculateArea(3.14*2);
    }
    public double calculateArea(double radian){
        return (radian/2.0)*radius*radius;
    }
    public double getRadius(){
        return radius;
    }
}
public class Program {
    public static void main(String[] args){
        Circle circle = new Circle(1);
        System.out.println("반지름이 "+circle.getRadius()+
                                "인 원의 넓이:"+circle.calculateArea());
        System.out.println("반지름이 "+circle.getRadius()+
                                 "인 반원의 넓이:"+circle.calculateArea(3.14));
    }
}

실행 결과

반지름이 1.0인 원의 넓이:3.14
반지름이 1.0인 반원의 넓이:1.57