1. 소개
Java의 클래스 이름 지정은 주요 프로그래밍 언어와 마찬가지로 Upper Camel Case 구문이라는 국제 규칙을 따릅니다. 그러나 같은 이름을 가진 클래스를 처리하는 경우 문제가 있습니다.
1998년 JDK의 초기 릴리스 이후 이 비정상적인 상황을 해결하는 방법에 대한 논쟁이 있었습니다. 여기에 JDK-4194542 가 있습니다. 이 주제에 대해 처음으로 공개된 버그이며 그 이후로 JDK 개발 팀의 권장 사항은 정규화된 클래스 이름을 사용하는 것이었습니다. 그럼에도 불구하고 JDK가 이러한 종류의 사용을 허용하는 기능을 곧 갖게 할 계획은 없습니다.
최근 2019년 8월 Java 개발자 커뮤니티는 이 상황을 해결하는 방법에 대한 새로운 제안( JEP )을 제기했으며 전 세계 Java 개발자로부터 더 많은 지원을 받고 있습니다.
이 사용방법(예제)에서는 이름이 같은 클래스를 처리하기 위한 전략과 권장 사항에 대해 설명합니다.
2. 클래스 정의
먼저 사용자 정의 패키지 com.baeldung.date 내에 Date 라는 클래스를 생성해 보겠습니다.
package com.baeldung.date;
public class Date {
private long currentTimeMillis;
public Date() {
this(System.currentTimeMillis());
}
public Date(long currentTimeMillis) {
this.currentTimeMillis = currentTimeMillis;
}
public long getTime() {
return currentTimeMillis;
}
}
3. 정규화된 클래스 이름
이러한 유형의 사용이 격리되고 자주 반복되지 않을 때 충돌을 피하기 위해 이 접근 방식을 사용할 것입니다. 그럼에도 불구하고 정규화된 이름을 사용하는 것은 일반적으로 좋지 않은 스타일로 간주됩니다.
사용 방법을 살펴보겠습니다. 특히 패키지 이름이 짧고 설명이 있으면 코드를 더 표현력 있게 만들어 혼란을 줄이고 가독성을 높일 수 있습니다.
반면에 내부 객체가 너무 큰 클래스나 메소드인 경우 디버그하는 데 도움이 됩니다.
public class DateUnitTest {
@Test
public void whenUsingFullyQualifiedClassNames() {
java.util.Date javaDate = new java.util.Date();
com.baeldung.date.Date baeldungDate = new com.baeldung.date.Date(javaDate.getTime());
Assert.assertEquals(javaDate.getTime(), baeldungDate.getTime());
}
}
4. 가장 많이 사용하는 것을 가져오기
우리는 가장 많이 사용하는 것을 가져오고 전체 클래스 경로와 함께 가장 적게 사용하는 것을 활용합니다. 이것이 Java 개발자 사이에서 일반적인 기술이자 모범 사례이기 때문입니다.
import java.util.Date;
public class DateUnitTest {
@Test
public void whenImportTheMostUsedOne() {
Date javaDate = new Date();
com.baeldung.date.Date baeldungDate = new com.baeldung.date.Date(javaDate.getTime());
Assert.assertEquals(javaDate.getTime(), baeldungDate.getTime());
}
}
5. 결론
이 기사에서는 특정 상황에 따라 동일한 이름을 가진 클래스를 사용하는 것과 관련하여 두 가지 가능한 접근 방식을 설명하고 이들 간의 주요 차이점을 관찰했습니다.
항상 그렇듯이 이 기사의 전체 코드 샘플은 GitHub 에서 찾을 수 있습니다 .