오버로딩(Overloading)
- 오버로딩이란 한 클래스 내에 같은 이름을 가진 컨스트럭터나 메서드를 2가지 이상의 형태로 선언하는 것을 의미합니다.
- 동일한 이름의 컨스트럭터나 메서드의 매개 변수를 다른 자료형으로 선언하거나 개수 혹은 선언 순서를 다르게 선언하여 오버로딩 시킬 수 있습니다.
- 이를 통해 하나의 메서드로도 다양한 경우에 대응할 수 있도록 설정할 수 있습니다.
- 오버로딩을 통해 비슷한 기능을 가진 다른 이름의 컨스트럭터나 메서드가 생성되는 것을 막아 코드의 가독성을 높을 수 있습니다.
- 오버로딩은 크게 컨스트럭터 오버로딩과 메서드 오버로딩으로 구분됩니다.
컨스트럭터 오버로딩(Constructor Overloading)
- 컨스트럭터 오버로딩은 같은 이름의 컨스트럭터를 2가지 이상의 형태로 선언하는 것을 의미합니다.
- 클래스의 컨스트럭터는 매개변수의 타입과 개수가 모두 달라야 오버로딩이 성립됩니다.
(매개변수의 순서만 다르게 나열된 경우에는 오버로딩으로 인식되지 않아 컴파일 에러 발생) - 이를 통해 한번에 여러 변수의 값들을 초기화 시킬 수 있습니다.
컨스트럭터 오버로딩 사용 예시
// 학생 클래스 생성
public class Student {
String name;
String school;
String department;
// 기본 컨스트럭터
public Student() {
}
// 이름만 요구하는 컨스트럭터
public Student(String name) {
this.name = name;
}
// 이름과 학교를 요구하는 컨스트럭터
public Student(String name, String school) {
this.name = name;
this.school = school;
}
// 이름, 학교와 학과를 요구하는 컨스트럭터
public Student(String name, String school, String department) {
this.name = name;
this.school = school;
this.department = department;
}
}
메서드 오버로딩(Method Overloading)
- 메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개로 정의하는 것을 의미합니다.
- 메서드를 오버로드 하기 위해서는 아래의 조건이 필요합니다.
- 오버로딩 하고자 하는 메서드의 이름이 동일해야 합니다.
- 매개 변수의 개수, 타입 혹은 순서가 다르게 정의되어야 합니다.
(같은 것이 있다면, 컴파일 에러 발생)
- 반환 타입은 메서드 오버로딩에 영향을 주지 않습니다.
메서드 오버로딩 사용 예시
// 학생 클래스 생성
public class Student {
String name;
String school;
String department;
// name을 매개변수로 받는 printInfo 메서드
public void printInfo(String name) {
System.out.println("학생의 이름은 " + name + "입니다.");
}
// name과 school을 매개변수로 받는 printInfo 메서드
public void printInfo(String name, String school) {
System.out.println("학생의 이름은 " + name + "이고, " + school + "에 다닙니다.");
}
// 아래 메서드는 위의 메서드와 같은 매개변수를 받고 반환형만 다르기 때문에 오버로딩 되지 않음
// public Stirng printInfo(String stName) {
// return stName;
// }
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 추상 제어자와 추상 클래스(Abstract Modifier & Abstract Class) (0) | 2022.07.04 |
---|---|
[Java] 클래스의 추상화(Abstraction) (0) | 2022.07.04 |
[Java] 클래스의 다형화(Polymorphism) (0) | 2022.07.01 |
[Java] 오버라이드(Override) (0) | 2022.07.01 |
[Java] 논리 연산자(Logical Operators) (0) | 2022.06.29 |