자바의 한 클래스 내에서 이미 사용하려는 이름과 동일한 이름의 메소드/생성자가 있다 하더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름과 동일한 이름의 메소드/생성자를 정의함을 의미 한다.
즉, 같은 클래스에서 생성자/메소드를 여러 형태로 만드는 것을 오버로딩(overload)이라고 한다.
- 메서드/생성자의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
주의 해야할 점
메서드/생성자 오버로딩 구현 조건은 매개변수의 개수나 타입이 반드시 달라야 한다. 매개변수의 개수나 타입이 같으면 컴파일 에러가 난다. 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 않는다.
몇가지 예시의 코드들을 보면서 이해해보자
[Animal class]
public class Animal{
//필드
private String animalName;
//생성자
public Animal(){}
public Animal(String animalName){
super();
this.animalName = animalName;
}
[Cat class]
public class Cat extends Animal{
//필드
private int age;
//생성자
public Cat(String animalName, int age){
super(animalName);
this.age = age;
}
public Cat(String animalName){
super(animalName);
}
public Cat(int age){
this.age = age;
}
public Cat(){}
}
위 예시 코드를 봤을 때 Cat 클래스에서
Animal클래스를 상속(extends)하고
있다는 것을 알수 있다.
하지만 여기서 중요한 부분은 상속이 아니다.
위 Cat class 와 Animal class를 보면
공통점이 있을 것이다 무엇인지 알아 볼 수 있으면
이미 오버로딩(overload)에 대해서 다 알고있는 것이다.
위 코드들을 보면 동일한 이름으로
여러개의 생성자를 만든것을 볼 수 있다.
또한 동일한이름을 가지고 있는 생성자 이나
차이점이라고 할 수 있는 것은
매개변수가 전부 다르다는 점이다.
즉, 오버로딩(overload)이란 어렵게 생각
할 필요 없이 생성자/메소드를 똑같은 이름으로
여러 형태로 만드는 것을 오버로딩 이라고 한다.
단, 매개변수는 전부 달라야 한다.
같은 동작을 해야하는 메서드/생성자를 작성해야 하는데
매개 변수가 다른 경우 많이 사용하고 있다.
또한 같은 기능을 하는 메서드/생성자가
있지만 만약 오버로딩이 없는 경우 엄청나게 많은
메서드/생성자의 이름을 만들어서 사용해야 하기 때문에
비효율 적이라고 할 수 있다.
하지만 오버로딩으로 인하여 이름만 기억해서 똑같은
이름으로 재사용 하면 되고 여러개의 이름을 만들지
않아도 오버로딩으로 사용하면 되니 많은 오류를
사전의 방지 할 수 있는 기능이라고 할 수 있다.
이러한 점이 많은 개발자들이 자바를 사용하는 이유
이며 오버로딩을 해야하는 이유라고 할 수 있다.