URI

URI는 특별한 구문으로 구성된 문자열이며 리소스를 실별하는데 사용된다. URI로 식별된 리소스는 서버에 위치한 파일일 수도 있지만, 이메일 주소나 뉴스메시지, 책, 사람이름, 인터넷 호스트 등이 될수도 있다.

URL

URL은 리소스를 식별하는 것 외에도 클라이언트가 해당 리소스를 찾을 수 있는 네트워크상의 위치도 함께 제공하는 URI다.

java.net.URI / java.net.URL

java.net.URI 클래스는 리소스를 식벼하는 용도로만 사용되지만,java.net.URL 클래스는 리소스 식별 외에도 리소스를 가져오는 목적으로도 사용된다.

java.net.URL

java.net.URL을 사용하여 데이터 가져오기

URL.equals, URL.sameFile 사용시 주의점

⚠️ URL.equals() 메서드는 실제로 해당 호스트에 대한 DNS 쿼리를 시도한다.

<aside> 🔥 이 말은, equals 메서드가 잠재적으로 I/O 블러킹을 야기한다는 점이다.이러한 이유로 HashMap과 같이 equals 메서드가 사용되는 자료구조에 URL 클래스를 저장하는 것은 바람직하지 않다.

</aside>

또한, equals 메서드는 실제 식별된 리소스의 데이터를 비교하지는 않는다. 예를 들어 https://m.naver.com과 https://m.naver.com/index.html 은 같지 않다. https://m.naver.com과 https://m.naver.com:443 역시 같지 않다.

sameFile()도 equals 처럼 DNS 쿼리를 야기한다. sameFile 메서드는 fragment 부분은 비교하지 않는다. (즉, 파일경로가 같은지만 확인)

toExternaForm()과 toURL()

toExernalForm은 URL 클래스를 문자열로 변환한다. (toString메서드와 기능은 동일하다, toString의 내부구현이 toExternalString을 호출해주는 것이 전부다.)

toURI는 URI 객체로 변환해준다.

java.net.URI