어제 오늘 내일

[Java] 패키지(package)와 import 구조 이해 본문

IT/Java

[Java] 패키지(package)와 import 구조 이해

hi.anna 2025. 12. 30. 08:51

Java에서 패키지(package)는 클래스를 논리적으로 묶어 관리하는 디렉터리 구조이며,
import는 다른 패키지에 있는 클래스를 현재 코드에서 사용할 수 있도록 가져오는 문법입니다.
코드를 체계적으로 관리하고 충돌을 방지하며 유지보수성을 높이는 데 필수적인 개념입니다.

 

1. 패키지(package)란?

패키지는 Java 클래스들을 폴더 구조로 그룹화한 논리적 단위입니다.

예:

com.example.project

문법:

package com.example.project;

패키지를 사용하는 이유

  • 클래스 이름 충돌 방지
  • 관련된 클래스들을 쉽게 그룹화
  • 프로젝트 구조 정리
  • 접근 제어자와 함께 캡슐화 강화

프로젝트가 커질수록 패키지를 잘 나누는 것이 매우 중요합니다.

패키지 구조 예

src/
 └─ com/
     └─ example/
         ├─ model/
         ├─ service/
         ├─ controller/
         └─ util/

 

2. 패키지가 있는 클래스 선언

파일의 가장 첫 줄에 반드시 package 문이 있어야 합니다.

package com.example.util;

public class MyUtil {
    public static void printHello() {
        System.out.println("Hello");
    }
}

설명

  • 파일 위치: 프로젝트 구조의 com/example/util/MyUtil.java
  • 그 외 import 문보다 항상 먼저 나와야 함

 

3. import란?

import는 다른 패키지의 클래스를 현재 클래스에서 사용하기 위한 선언입니다.

문법:

import 패키지명.클래스명;

예:

import java.util.List;

이제 List를 패키지명 없이 바로 사용할 수 있습니다.

 

4. import 사용 예제

예제 1: 특정 클래스 import

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
    }
}

예제 2: 여러 클래스가 있는 패키지 import

import java.util.*;

주의

  • *는 하위 패키지를 포함하는 것이 아니라 해당 패키지 안의 모든 클래스만 포함

잘못된 예:

import java.util.*; // java.util.concurrent 패키지는 포함되지 않음

 

 

5. import 없이 사용하는 경우 (패키지명 포함)

import를 쓰지 않고도 패키지명을 명시하면 사용 가능하지만 권장되지 않습니다.

java.util.Date today = new java.util.Date();

이 방식은 코드가 길고 가독성이 떨어집니다.

 

6. 같은 패키지에서는 import 불필요

동일한 패키지에 속한 클래스끼리는 import 문 없이 바로 사용할 수 있습니다.

예:

package com.example.service;

public class UserService { ... }

같은 패키지에 있는:

package com.example.service;

public class OrderService {
    UserService userService = new UserService(); // import 필요 없음
}

 

 

7. 자주 쓰는 Java 기본 패키지

Java는 자동으로 java.lang 패키지를 import합니다.

예:

  • String
  • System
  • Math
  • Integer

따라서 아래는 import 없이도 사용 가능합니다.

String s = "Hello";
System.out.println("Hi");

 

 

8. 클래스 이름 충돌 시

서로 다른 패키지에서 같은 이름의 클래스를 사용할 경우 import 대신 완전한 패키지 경로로 사용해야 합니다.

예:

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());

 

 

9. 전체 예제

com/example/util/MyUtil.java

package com.example.util;

public class MyUtil {
    public static void hello() {
        System.out.println("Hello from Util");
    }
}

Main.java

package com.example;

import com.example.util.MyUtil;

public class Main {
    public static void main(String[] args) {
        MyUtil.hello();
    }
}

출력:

Hello from Util

 

 

10. 정리

  • package는 클래스를 논리적으로 묶는 폴더 구조
  • 파일의 첫 줄에 package 문을 작성해야 함
  • import는 다른 패키지의 클래스를 가져오는 문법
  • *는 하위 패키지를 포함하지 않음
  • 같은 패키지 내부는 import 불필요
  • java.lang은 자동 포함

 

반응형
Comments