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 에서 찾을 수 있습니다 .

Generic footer banner