겉으로 보기엔 작은 변경이에요. 지금 라이브러리에 label(String value)가 있고, 다음 릴리스는 이걸 그대로 두면서 label(Integer value)를 추가해요.
이미 컴파일된 호출 코드는 괜찮아요. 클래스 파일에 String 시그니처가 이미 들어 있고, 계속 그걸 호출하니까요. 다시 빌드할 때가 문제예요. 손대지 않은 label(null)을 새 오버로드 쌍에 대고 컴파일하면 더는 컴파일되지 않아요. 두 메서드 모두 null을 받을 수 있는데 어느 쪽도 더 구체적이지 않거든요. 원래 메서드는 하나도 바뀌지 않았는데도 이런 일이 생겨요.
그래서 릴리스 노트는 두 부류에게 말해야 해요. 바이너리를 그대로 쓰는 쪽은 건너뛰어도 돼요. 소스에서 다시 빌드하는 쪽은 어제와 같은 뜻을 유지하려고 한 줄을 고쳐야 할 수도 있어요. 오버로드 자체를 반대하는 건 아니지만, 아무것도 요청하지 않은 사람에게 넘기기엔 작지 않은 비용이에요.
마이그레이션 안내에는 뭐라고 적어야 할까요? 그리고 어느 시점부터는 새 메서드 이름이 그냥 더 배려 있는 선택일까요?