메소드 오버로딩
public class MathOL {
// 두 정수의 합을 반환
public int add(int a, int b) {
return a + b;
}
// 세 정수의 합을 반환
public int add(int a, int b, int c) {
return a + b + c;
}
// 두 실수의 합을 반환
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
MathOL mathOps = new MathOL();
System.out.println(MathOL.add(2, 3)); // 5
System.out.println(MathOL.add(2, 3, 4)); // 9
System.out.println(MathOL.add(2.5, 3.7)); // 6.2
}
}
자바에서는 한 클래스 내에 동일한 이름의 메소드를 둘 이상 정의하는 것을 허용하지 않습니다. 하지만 매개변수의 선언이 다르면 동일한 이름의 메소드를 둘 이상 정의하는 것이 가능합니다. 이를 메소드 오버로딩이라 합니다.
메소드 오버로딩을 통해 동일한 작업을 수행하지만, 입력되는 데이터의 형식이나 수에 따라 다른 동작을 필요로 할 때 유용하게 사용할 수 있습니다.
메소드 오버로딩의 조건
호출할 메소드를 찾을 때 두 가지 정보를 참조하여 메소드를 찾습니다.
- 동일한 메소드 이름, 다 매개변수 정보 : 오버로딩된 메소드는 메소드 이름이 같아야 하지만, 매개변수의 유형, 개수, 순서가 달라야 합니다.
- 반환형은 무관 : 반환형은 오버로딩 조건에 영향을 주지 않습니다. 따라서 반환형이 다르다고 해서 오버로딩이 성립하지 않습니다.
따라서 메소드의 이름이 같아도 매개변수의 선언이 다르면 메소드 호출문의 전달인자를 통해서 호출된 메소드를 구별할 수 있습니다.
하지만 메소드를 참조할 때 반환형은 해당사항이 없어 매개변수와 메소드 이름이 같고 반환형만 다르면 메소드 오버로딩이 될 수 없습니다.
메소드 오버로딩의 장점
- 가독성 향상: 동일한 작업을 수행하는 메소드를 같은 이름으로 그룹화하여, 코드의 가독성을 향상시킵니다.
- 유연성 제공: 같은 기능을 다양한 형태로 제공하여 사용자에게 유연한 인터페이스를 제공합니다.
- 코드 유지보수성 증가: 같은 이름의 메소드를 통해 관련 기능을 집중 관리할 수 있으므로, 코드의 유지보수성이 높아집니다.
메소드 오버로딩 시 주의사항
- 오버로딩의 혼란: 메소드 이름이 동일하기 때문에, 매개변수 목록에 대한 명확한 이해가 필요합니다. 특히 자동 형변환이 가능한 경우 예상치 못한 메소드가 호출될 수 있습니다
- 매개변수의 중요성: 오버로딩은 매개변수의 타입과 개수에 따라 결정되므로, 혼동을 피하기 위해 매개변수 설계를 명확히 해야 합니다.
생성자 오버로딩
class Person {
String name;
int age;
public Person() {
name = "hyun";
age = 20;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(int age) {
this("park", age);
}
}
생성자 또한 매개변수 선언이 다르면 둘 이상 정의 즉 오버로딩이 가능합니다.
메소드 오버로딩에서 THIS의 의미
자바에서 this 키워드에는 여러 가지 의미를 지니고 있습니다. 그 중 두 가지를 소개하면
- 다른 생성자 호출 : this가 존재하는 생성자는 초기화할 값 만 전달하고 전달받은 메소드에서 초기화를 진행합니다.
- 인스턴스 변수 접근 : 매개변수의 이름이 인스턴스 변수와 동일한 경우 메소드 내에서 인스턴스 변수를 사용할 수 없지만 this를 사용하면 인스턴스 변수를 메소드 내에서 접근할 수 있게 됩니다.
출처
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'개발 언어 (Language) > Java' 카테고리의 다른 글
배열 (0) | 2024.08.05 |
---|---|
문자열 클래스 (0) | 2024.08.03 |
정보 은닉과 캡슐화 (0) | 2024.08.02 |
클래스와 생성자 (0) | 2024.08.02 |
Java 메소드와 변수의 스코프 (0) | 2024.08.01 |