자바에서 오버로딩이 왜 이상하게 동작할까?(feat. 오토박싱, 제네릭, 타입소거)며칠 전에 정처기 기출 문제 중 자바 코드를 보다가 정말 헷갈리는 상황을 하나 만났다. 분명히 Integer로 값을 넘겼는데, 의도했던 오버로딩 메서드가 안 불리는 거다. 당연히 print(Integer a)가 불릴 줄 알았는데, 웬걸 print(Object a)가 호출된다."내가 뭘 잘못했나?" 싶어서 코드를 찬찬히 뜯어보다가, 자바가 제네릭을 처리하는 방식 + 오버로딩 결정 시점 + 오토박싱까지 엮여서 이런 일이 생긴 거였다. Java를 사용하다 보면 메서드 오버로딩이 직관과 다르게 동작하는 상황을 종종 마주하게 된다. 특히 제네릭과 함께 사용할 때, 어떤 메서드가 호출되는지 예상하기 어려운 경우가 있다.처음 썼던 코..