동일한 이름의 메서드를 여러 개 선언하여 사용할 수 있는 것을 메서드 오버 로딩이라고 하는데요. 메서드 오버 로딩에 대해서 배워봅시다.
ㅤ
생성자 오버로딩과 같이 메서드도 오버로딩 할 수 있습니다. 메서드의 이름이 같더라도 메서드에 선언된 매개 변수의 개수나 자료형이 다르면 동일한 이름의 메서드를 여러 개를 선언할 수 있습니다.
class Person {
void setData(String name) {
…
}
void setData(int age) {
…
}
void setData(String name, int age) {
…
}
}
그리고 이런 방식으로 메서드를 사용할 수 있습니다.
Person person = new Person();
person.setData("이철수");
person.setData(30);
person.setData("이철수", 30);
다만 생성자 오버로딩에서 주의할 점과 똑같이, 같은 자료형의 매개변수로 메서드를 선언하여 오버로딩 할 수 없습니다.
class Person {
// 같은 자료형의 매개변수로 오버로딩 할 수 없다
void setData(String name) {
…
}
// 같은 자료형의 매개변수로 오버로딩 할 수 없다
void setData(String sex) {
…
}
}
이유는 생성자 오버로딩과 동일하므로 따로 설명드리지는 않겠습니다.
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
void setData(String name) {
this.name = name;
}
void setData(int age) {
this.age = age;
}
void setData(String name, int age) {
setData(name);
setData(age);
}
// 인스턴스 메서드
String getPersonInfo() {
return String.format("name: %s, age: %d", name, age);
}
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setData("김철수", 40);
System.out.println(person.getPersonInfo());
}
}
출력
name: 김철수, age: 40
class Person { String name; int age; void setData(String name) { this.name = name; } void setData(int age) { this.age = age; } void setData(String name, int age){ setData(name); setData(age); } String getPersonInfo(){ return String.format("name: %s, age: %d", name, age); } } 해당 코드에서 setData(String name) 메소드에서 인스턴스 변수 name을 초기화하고, setData(int age) 메소드에서 인스턴스 변수 age를 초기화 했기 때문에 Person(String name, int age){ this.name = name; this.age = age; } 위와 같은 생성자를 만들 필요가 없는 건가요? 아니면 Default 생성자가 만들어진건가요?
실습해보세요의 코드를 작성해보세요.
동일한 이름의 메서드를 여러 개 선언하여 사용할 수 있는 것을 메서드 오버 로딩이라고 하는데요. 메서드 오버 로딩에 대해서 배워봅시다.
ㅤ
생성자 오버로딩과 같이 메서드도 오버로딩 할 수 있습니다. 메서드의 이름이 같더라도 메서드에 선언된 매개 변수의 개수나 자료형이 다르면 동일한 이름의 메서드를 여러 개를 선언할 수 있습니다.
class Person {
void setData(String name) {
…
}
void setData(int age) {
…
}
void setData(String name, int age) {
…
}
}
그리고 이런 방식으로 메서드를 사용할 수 있습니다.
Person person = new Person();
person.setData("이철수");
person.setData(30);
person.setData("이철수", 30);
다만 생성자 오버로딩에서 주의할 점과 똑같이, 같은 자료형의 매개변수로 메서드를 선언하여 오버로딩 할 수 없습니다.
class Person {
// 같은 자료형의 매개변수로 오버로딩 할 수 없다
void setData(String name) {
…
}
// 같은 자료형의 매개변수로 오버로딩 할 수 없다
void setData(String sex) {
…
}
}
이유는 생성자 오버로딩과 동일하므로 따로 설명드리지는 않겠습니다.
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
void setData(String name) {
this.name = name;
}
void setData(int age) {
this.age = age;
}
void setData(String name, int age) {
setData(name);
setData(age);
}
// 인스턴스 메서드
String getPersonInfo() {
return String.format("name: %s, age: %d", name, age);
}
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setData("김철수", 40);
System.out.println(person.getPersonInfo());
}
}
출력
name: 김철수, age: 40
class Person { String name; int age; void setData(String name) { this.name = name; } void setData(int age) { this.age = age; } void setData(String name, int age){ setData(name); setData(age); } String getPersonInfo(){ return String.format("name: %s, age: %d", name, age); } } 해당 코드에서 setData(String name) 메소드에서 인스턴스 변수 name을 초기화하고, setData(int age) 메소드에서 인스턴스 변수 age를 초기화 했기 때문에 Person(String name, int age){ this.name = name; this.age = age; } 위와 같은 생성자를 만들 필요가 없는 건가요? 아니면 Default 생성자가 만들어진건가요?
실습해보세요의 코드를 작성해보세요.