패키지 : 관련있는 클래스/인터페이스들의 컴파일된 .class 파일들을 하나의 디렉토리에 묶어 놓는 것

패키지의 필요성

  • 여러 개발자가 공동 작업을 할 때, 클래스의 이름이 겹칠 수 있음.
    • 하나로 합칠때, 오류 발생
      ->패키지 개념을 이용해 이를 해결

모듈 : 여러 패키지와 자원들을 묶어 놓은 컨테이너

  • 자바 API를 여러 모듈을(99개) 로 분할하여 응용프로그램 실행에 적합한 모듈들로만 실행환경을 구축할 수 있게함.

JDK의 java.base 모듈에 있는 패키지와 클래스

import java.util.Scanner;
  • java.util : 패키지 이름
  • Scanner : 클래스 이름
  • import : 패키지를 사용하기 위한 import문

Import 

  •  import를 사용하는 경우 : 소스의 시작 부분에 사용하려는 패키지 명시
    • 특정 클래스의 경로명을 입력해 특정 클래스 사용
    • " 클래스의 패키지 . * " 을 입력해 패키지 내 여러 클래스 사용
  • import 를 사용하지 않는 경우 : 소스 내에 패키지 및 클래스의 전체 경로명을 입력
//import문을 사용하지 않은 경우
public class ImportExample1{
	public static void main(String[] args){
    	java.util.Scanner scnr =             //소스 내에 패키지 이름과 클래스 이름의
        	new java.util.Scanner(System.in); // 전체 경로명을 써줘야 함
    }
}


//import문을 사용하는 경우
//소스의 시작 부분에 사용하려는 패키지 명시
import java.util.Scanner;//특정 클래스의 경로명. 특정 클래스만 사용
public class ImportExample2 {
	public static void main(String[] args) {
		Scanner scnr = new Scanner(System.in);
	}
}


import java.util.*;//패키지 내의 모든 클래스 포함
public class ImportExample3 {
	public static void main(String[] args) {
		Scanner scnr = new Scanner(System.in);
	}
}
  • 클래스의 이름이 겹치는 경우 : import문을 사용하지 않고 , 소스내에 패키지 및 클래스의 전체 경로명을 입력하여 관리

패키지 만들기

  • package 패키지명;
  • 컴파일한 클래스 파일(결과)을 패키지에 저장
  • 밑에 소스파일이 어디있는 나타내는 게 아님
  • 소스파일 첫 줄에 선언
package A;//turn 클래스를 컴파일하여 A패키지에 저장 
public class turn{}//이제 이 클래스의 경로명은 A.turn
  • turn클래스의 경로명은 A.turn
  • 다른 클래스에서 turn클래스를 사용하기 위해서는 import A.turn
package B;
import A.turn;//A 패키지에 있는 turn 클래스 사용

public class drive{
	public void toRight(){
    	turn t = new turn();//turn 인스턴스 선언 및 생성
        //A.turn t = new turn(); import문을 사용하지 않은 경우
    }
}

 

 


디폴트 패키지

  • 패키지 선언문이 없이 만들어진 클래스의 패키지
  • 디폴트 패키지의 위치는 현재 디렉토리

패키지의 특징

  • 패키지 계층 구조 : 클래스 파일 관리 용이
  • 패키지별 접근 권한 : 패키지 별로 접근 권한 가능 ( 디폴트 접근 지정자 )
  • 동일한 이름의 클래스 사용가능

 

+ Recent posts