[Day 5 | Java] 패키지 / import

y♡ding·2024년 10월 18일
0

데브코스 TIL

목록 보기
27/163

📦 패키지

👉🏻 패키지의 목적과 필요성

  • 클래스 이름 충돌 방지: 자바에서 많은 클래스가 존재할 수 있기 때문에, 패키지를 사용해 고유한 네임스페이스를 제공하여 클래스 이름 충돌을 방지할 수 있다. 동일한 이름의 클래스도 서로 다른 패키지에 존재할 수 있다.
  • 코드의 구조적 관리: 패키지는 코드를 논리적이고 계층적인 구조로 조직화하여, 대규모 프로젝트에서도 코드를 쉽게 관리하고 탐색할 수 있게 한다.
  • 접근 제어: 패키지는 접근 제어와 관련된 중요한 역할도 한다. 같은 패키지 안에 있는 클래스 끼리는 package-private(접근 제어자가 없는 상태) 접근 권한을 가지므로, 패키지를 기준으로 접근을 제한할 수 있다.

📣 패키지 선언과 기본 사용법

자바에서 클래스를 특정 패키지에 포함시키려면 패키지 선언을 사용해야 한다. 패키지 선언은 파일의 가장 첫 줄에 위치해야 하며, 해당 클래스가 속할 패키지를 명시한다.

package 패키지이름;

public class 클래스명 {
   // 클래스의 내용
}

예시

package com.example.project;  //패키지 선언

public class MyClass {
    
    public void display() {

        System.out.println("패키지 예제");
   }
 
}

🤙🏻 이름 규칙

  • 소문자로 작성: 자바에서는 패키지 이름을 소문자로 작성하는 것이 규칙이다. 대문자를 사용하지 않고 소문자로만 작성하는 이유는 클래스 이름과 구별하기 위함이다.
  • 패키지와 디렉토리 구조가 일치해야 함: 자바의 패키지 구조는 실제 파일 시스템의 디렉토리 구조와 일치해야 한다.

📌 import

패키지에 있는 클래스를 사용하려면 ìmport 문을 사용하여 임포트해야 한다. 자바에서는 단일 클래스를 임포트하거나, 패키지 내의 모든 클래스를 임포트할 수 있다.

  • 단일 클래스 임포트:
    import com.example.project.MyClass;
  • 패키지 내 모든 클래스 임포트:
    import com.example.project.*;

🚨 주의

import 문은 패키지 내 모든 클래스를 포함하는 것이 아니라, 해당 패키지의 직접적인 클래스만 임포트한다. 하위 패키지는 자동으로 임포트되지 않는다.


⚡️ 자바 패키지 컴파일

javac -d 명령어는 컴파일된 클래스 파일을 저장할 출력 디렉토리를 지정한다. 이 옵션을 사용하면, 자바 컴파일러는 패키지 구조를 기반으로 디렉토리를 자동으로 생성하고, 해당 디렉토리 안에 .class 파일을 저장한다

javac -d [출력 디렉토리 경로] [컴파일할 자바 파일]
  • [출력 디렉토리 경로]: 컴파일된 .class 파일을 저장할 경로
  • [컴파일할 자바 파일]: 컴파일할 자바 소스 파일의 경로

예시

javac -d . -encoding utf-8 Pack2.java

예제 코드

public class Pack1 {

    public Pack1() {
    
        System.out.println("Pack1 생성자");
    
    }
}

package com;

//컴파일 시 해당 패키지에 클래스 파일이 생성된다.
// javac -d . -encoding utf-8 Pack2.java

public class Pack2 {

    public Pack2() {
    
        System.out.println("Pack2 생성자");
    
    }
}

package com.java.test;

public class Pack3 {

    public Pack3() {
    
        System.out.println("Pack3 생성자");
    
    }
}

import com.Pack2;

// import com.java.test.Pack3'
// import com.java.test.*;

public class PackMainEx01 {

    public static void main(String[] args) {
        
        Pack p1 = new Pack1();
        
        // 패키지 안의 클래스에 접근
        com.Pack.p2 = new com.Pack2();
        
        // import 문으로 접근
        Pack p22 = new Pack2();
        
        // 긴 패키지 이름
        com.java.test.Pack3 p3 = new com.java.test.Pack3();

🚨 패키지 컴파일 문제 실행방법

[문제]
com.naver 라는 패키지 안에 이름, 학번, 나이, 키로 구성되는 Student 클래스를 선언하고, 데이터를 가져오는 StudentEx 실행 클래스 선언 실행(생성자만 호출)하세요.

package com.naver;

public class Student {
    
    String hakbun;
    String name;
    int age;
    double height;
   
}

package com.naver;

// import com.naver.Student;

public class StudentEx {

    public static void main(String[] args) {
    
        Student s = new Student();
        
        s.hakbun = "11111";
        s.name = "김울보";
        s.age = 25;
        s.height = 170;
        
        System.out.println(s.hakbun);
        System.out.println(s.name);
    }
}

터미널에서 패키지 컴파일 후 실행

javac -d . -encoding utf-8 Student.java
javac -d . -encoding utf-8 StudentEx.java
java com.naver.StudentEx

0개의 댓글

관련 채용 정보