1. 개요

이 문서에서는 Paths.get() 메서드 와 Path.of () 메서드 간의 유사점과 차이점에 대해 설명합니다 .

2. 동일한 행동

Path.of () 메서드는 URI 를 인수로 사용 하여 연결된 개체 의 경로 로 변환 합니다.

이제 Paths.get() 코드를 살펴보겠습니다 .

public final class Paths {
    public static Path get(URI uri) {
        return Path.of(uri);
    }
}

보시다시피 Paths.get()이 수행하는 유일한 작업 은 Path.of() 를 호출 하는 것 입니다. 따라서 두 메서드는 동일한 결과를 반환합니다.

3. 방법의 차이점

이제 이 두 가지 방법의 차이점에 대해 설명하겠습니다.

3.1. 소개 버전

Java 8 이전 에는 인터페이스 내 에서 기본 정적 메서드 를 정의할 수 없었습니다 . 따라서 Path 에는 동반자 인터페이스인 Paths 가 필요했습니다 . 이때 모든 팩토리 메서드 는 경로에 정의되어 있습니다.

그런 다음 이 제한이 제거되었고 Java 11에서는 팩토리 메서드의 코드가 결국 Path 인터페이스로 이동되었습니다. 또한 Paths.get() 의 코드가 Path.of() 를 따르 도록 업데이트되었습니다 . Paths.get() 은 이전 버전과의 호환성을 보장하기 위해 실제로 유지되었습니다.

3.2. 명명 패턴

코드가 이동되었을 뿐만 아니라 팩토리 메서드의 이름도 변경되었습니다. 원래 이름의 문제점은 게터처럼 보인다는 것입니다. 그러나 Paths.get() 은 Paths 객체 에 속한 어떤 것도 가져오지 않습니다 . Java에서 정적 팩토리 메소드의 표준 이름은 of 입니다. 예를 들어 EnumSet.of() 는 이 패턴을 따릅니다. 그 결과 일관성을 위해 새 메서드를 Path.of() 라고 했습니다.

4. 어느 것을 사용해야 합니까?

Java 7과 10 사이의 버전으로 작업하는 경우 Paths.get() 을 사용하는 것 외에 다른 선택이 없습니다 . 그렇지 않으면 최신 버전으로 작업하는 경우 Path.of() 로 이동해야 합니다 . Paths 클래스 는 클래스의 설명에 명시된 대로 향후 Java 릴리스에서 더 이상 사용되지 않을 수 있습니다. 또한 Path 의 팩토리 메서드를 직접 사용 하면 추가 입력이 필요하지 않습니다.

5. 결론

이 예제에서 우리는 두 개의 동일한 메서드인 Paths.get()Path.of()가 역사적인 이유로 공존한다는 것을 이해했습니다. 차이점을 분석하고 상황에 따라 가장 적합한 것으로 결론을 내렸습니다.

Generic footer banner