TIL(4) - 생성자 오버로딩과 메서드 오버로딩에 대해 공부하자!
오버로딩
은 오버라이딩
과 함께 Java에서 다형성을 지원하는 여러 방법 중 하나이다.
오버로딩(Overloading) - 서로 다른 매개변수/자료형을 갖는 여러 생성자/메서드를 같은 이름으로 선언하는 것
오버라이딩(Overriding) - 상속 관계에 있는 자식 클래스가 부모 클래스에서 정의된 메서드를 같은 자료형을 갖는 메서드로 재정의 하는 것
자바 오버로딩에는 생성자 오버로딩과 메서드 오버로딩이 존재하는데, 각각 예제를 통해 알아보자.
생성자의 주요 목적이 인스턴스 변수 초기화라면 생성자 오버로딩은 생성자도 초기화하고 싶을 때 사용되는 것으로 매개변수가 다른 생성자를 여러개 선언 하는 것이다.
class Person {
String name;
String sex;
int age;
Person(String name) {
this.name = name;
}
Person(int age) {
this.age = age;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person person1 = new Person("Ruby");
Person person2 = new Person(27);
Person person3 = new Person("Alice, 22");
Person
으로 생성자명이 동일하나 각각 String name
, int age
, String name, int age
로 매개변수가 다르다.
class Person {
String name;
String sex;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
Person(String sex, int age) {
this.sex = sex;
this.age = age;
}
}
Person person = new Person("여성임", 34);
Sting A, int age
의 동일한 자료형과 개수를 가진 매개변수가 선언되었다. new Person("여성임", 34)
가 Person(String name, int age)
를 호출한 것인지 Person(String sex, int age)
를 호출할 것인지 알 수 없다.
일반적으로 오버로딩
이라고 말하면 메서드 오버로딩
을 의미한다. 메서도 오버로딩
은 메서드의 이름이 같아도 메서드에 선언된 매개변수의 개수와 자료형이 다르면 같은 이름의 메서드를 여러개 선언 가능 한 것을 뜻한다.
Person.java
class Person {
String name;
int age;
void setInfo(String name) {
this.name = name;
}
void setInfo(int age) {
this.age = age;
}
void setInfo(String name, int age) {
setInfo(name);
setInfo(age);
}
// 인스턴스 메서드
String getInfo() {
return String.format("내 이름은 %s이고 나이는 %d이다.", name, age);
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setInfo("마리아", 16);
System.out.println(person.getInfo());
}
}
// 내 이름은 마리아이고 나이는 16이다.
setInfo
로 메스드명은 같으나 String name
, int age
, String name, int age
로 매개변수가 각기 다르다.
Person.java
class Person {
String name;
String sex;
void setInfo(String name) {
System.out.println(name);
}
void setInfo(String sex) {
System.out.println(sex);
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setInfo("남성임");
}
}
// 오류 발생
person.setInfo("남성임")
이 String name
과 String sex
중 어떤 메서드를 호출하려는지 알 수가 없다.