1️⃣ .zip

.zip 파일은 하나의 파일 안에 여러 개의 파일이 들어 있는 파일. → 이런 형태를 아카이브(archive)

zip archive는 여러 파일을 하나의 파일로 편리하게 다루고 보관 가능 + 압축까지 해주어 각 용량의 합보다 더 작음

2️⃣ JAR (Java ARchive)

JAR 파일은 Java에서 사용되는 특정 유형의 아카이브.

.zip과 같이 여러 파일이 포함된 단일 파일이며 가장 중요한 부분은 파일들이 컴파일된 .class 파일

JAR 파일에는 컴파일된 코드가 포함되어 있으므로 두 가지 방식으로 이용 가능

  1. Java 애플리케이션을 실행할 때 클래스 경로에 JAR 파일을 추가하여 안에 포함된 모든 코드를 현재 애플리케이션에서 사용 가능
  2. JAR 파일 자체가 실행 가능한 애플리케이션이되며 이를 실행 가능

→ JAR 파일은 단일 파일에 코드를 저장하므로 Java Library를 JAR 형식으로 쉽게 배포 가능. 실제로 gradle, maven을 통한 프로젝트의 의존성을 다운로드 받게되면 수 많은 JAR 파일들이 의존성에 포함됨을 알 수 있음.

✅  용도

  1. 애플리케이션 배포.

    → JAR 파일은 Java 애플리케이션을 배포하는 표준 방식. 애플리케이션이 필요로 하는 모든 파일(클래스 파일, 텍스트 파일, 이미지 등)을 하나의 JAR 파일로 묶어 쉽게 배포

  2. 라이브러리 패키징

    → 개발자들은 이런 라이브러리 JAR 파일을 프로젝트에 포함시켜 다양한 기능을 손쉽게 사용 가능

  3. 클래스 로더(ClassLoader)

    → JAR 파일은 JVM에서 클래스 로딩 메커니즘과 통합되어 있음. 이를 통해 JVM은 애플리케이션을 실행할 때 JAR 파일 안에 있는 클래스를 자동으로 로딩 가능

    쉽게 해석하면 JVM은 JAR 파일 안에 들어있는 .class 파일을 읽을 수 있게 설계되어 있어서 JVM은 애플리케이션을 실행할 때 JAR 파일 안에 있는 클래스를 자동으로 로딩 가능하다는 것.

    그래서 따로 javac로 하나씩 컴파일하고 java로 실행할 필요 없이, java -jar myapp.jar 이런 식으로 실행하면 JVM이 알아서 처리

✅ 구조