다중정의 : 메서드 이름은 같지만 매개변수의 타입이나 개수가 다른 여러 메서드를 정의하는 것.
public class Calculator {
// 두 개의 정수를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// 세 개의 정수를 더하는 메서드
public int add(int a, int b, int c) {
return a + b + c;
}
// 문자열을 더하는 메서드 (문자열 연결)
public String add(String a, String b) {
return a + b;
}
}
다중정의를 피할 수 없는 경우 :
- 매개변수 타입 변환
public class OverloadingExample {
public void print(String s) {
System.out.println("String: " + s);
}
public void print(Integer i) {
System.out.println("Integer: " + i);
}
public void print(Double d) {
System.out.println("Double: " + d);
}
}
매개변수 타입을 변환하여 명확하게 구분되도록 한다.
- 매개변수의 수가 같은 경우
public class OverloadingExample {
public void print(Object o1, Object o2) {
System.out.println("Object: " + o1 + ", " + o2);
}
public void print(String s1, String s2) {
print((Object) s1, (Object) s2);
}
public void print(Integer i1, Integer i2) {
print((Object) i1, (Object) i2);
}
}
모든 다중정의된 메서드가 동일한 동작을 하도록 만든다.
핵심정리 : 프로그래밍 언어가 다중정의를 허용한다고 해서 다중정의를 꼭 활용하라는 뜻은 아니다. 일반적으로 매개변수 수가 같을 때는 다중정의를 피하는게 좋다. 상황에 따라, 특히 생서자라면 이 조언을 따르기가 불가능할 수 있다. 그럴 때는 헷갈릴 만한 매개변수는 형변화하여 정확한 다중정의 메서드가 선택되도록 해야 한다. 이거싱 불가능하면, 예컨대 기존 클래스를 수정해 새로운 인터페이스를 구현해야 할 때는 같은 객체를 입력받는 가중정의 메서드들이 모두 동일하게 동작하도록 만들어야 한다. 그렇지 못하면 프로그래머들은 다중정의된 메서드나 생성자를 효과적으로 사용하지 못할 것이고, 의도대로 동작하지 않는 이유를 이해하지도 못할 것이다.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) | 2024.05.21 |
---|---|
[이펙티브 자바] 아이템 53. 가변인수는 신중히 사용하라 (0) | 2024.05.21 |
[이펙티브 자바] 아이템 51. 메서드 시그니처를 신중히 설계하라 (0) | 2024.05.14 |
[이펙티브 자바] 아이템 50. 적시에 방어적 복사본을 만들라 (0) | 2024.05.12 |
[이펙티브 자바] 아이템 49. 매개변수가 유효한지 검사하라 (0) | 2024.05.08 |