item 52 : 다중정의는 신중히 사용하라
1. 다중정의
1) 문제가 되는 코드
import org.junit.Test;
import java.util.*;
public class OverloadingProblem {
static class CollectionClassifier {
public static String classify(Set<?> s) {
return "집합";
}
public static String classify(List<?> s) {
return "리스트";
}
public static String classify(Collection<?> s) {
return "그 외 컬렉션";
}
}
@Test
public void collectionClassifierTest() {
Collection<?>[] collections = {
new HashSet<>(), // Set
new ArrayList<>(), // List
new HashMap<>().values() // Collection
};
for (Collection<?> collection : collections) {
System.out.println(CollectionClassifier.classify(collection));
}
}
}
2) 문제점과 실행 결과
3) 정적 바인딩(Static Binding)과 동적 바인딩(Dynamic Binding)
4) 오버로딩이 혼란을 일으키는 이유
5) 재정의된 메서드 호출 메커니즘
재정의(오버라이딩)의 경우
실행 결과
6) 재정의(Overriding)와 다중 정의(Overloading)의 차이
7) 오버로딩 없는 해결법

2. 다중 정의 사용시 주의사항

3. 다중 정의의 함정
1) 다중 정의의 함정 1: 오토박싱
2) 다중 정의의 함정 2: 람다와 메서드 참조
자바 4 이전의 상황
자바 5 이후의 변화
3) 다중 정의의 함정 피하기 1: 인수 포워드하기
4) 잘못된 설계 사례: String 클래스의 다중 정의
5) 올바른 다중 정의의 예: ObjectOutputStream 클래스
6) 생성자의 다중 정의와 정적 팩토리 메서드
7) 혼동 없는 다중 정의 조건
📚 핵심 정리
Last updated