Package 와 import

박주현·2022년 9월 29일
1

혼공

목록 보기
4/20

패키지(Package)

  • 패키지란, 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다.

  • 클래스의 실제 이름은 패키지명을 포함한 것이다.
    예를 들면 String 클래스의 실제 이름은 java.lang.String이다. java.lang 패키지에 속한 String 클래스라는 의미이다. 그래서 같은 이름의 클래스일 지라도 서로 다른 패키지에 속하면 패키지명으로 구별이 가능하다.

Package

  • 클래스가 물리적으로 하나이 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 그래서 어떤 패키지에 속한 클래스는 해당 디렉토리에 존재하는 클래스(.class) 파일이어야 한다.
    예를 들어, java.lang.String클래스는 물리적으로 디렉토리 java의 서브디렉토리인 lang에 속한 String.class파일이다. 그리고 우리가 자주 사용하는 System클래스 역시 java.lang패키지에 속하므로 lang 디렉토리에 포함되어 있다. String 클래스는 rt.jar 파일에 압축되어 있다.

요약

  • 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야한다.
  • 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
  • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.

import

  • 소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 한다. 하지만 매번 패키지명을 붙여서 작성하기란 여간 불편한 일이 아니다.
    클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스이름에서 패키지명은 생략할 수 있다.

  • import 문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음, 모든 클래스이름 앞에 패키지명을 붙여 준다.

  • eclipse는 단축키 'ctrl+shift+o'를 누르면, 자동으로 import문을 추가해주는 편리한 기능을 제공한다.

  • 참고 import문은 프로그램의 성능에 전혀 영향을 미치지 않는다. import문을 많이 사용하면 컴파일 시간이 아주 조금 더 걸릴 뿐이다.

import문의 선언은 모든 소스파일(.java)에서 import문 다음에, 그리고 클래스 선언문 이전에 위치해야 한다. import문은 package문과 달리 한 소스파일에 여러 번 선언할 수 있다.

  • 일반적인 소스파일(*.java)의 구성은 다음의 순서로 되어 있다.
  1. package문
  2. import문
  3. class 선언
import 패키지명.클래스명;
	or
import 패키지명.*;

import java.util.Calendar;
import java.util.Date;
import java.util.ArrayList;

// 이처럼 import문을 여러 번 사용하는 대신 아래와 같이 한 문장으로 처리할 수 있다.

import java.util.*;	//	패키지의 수가 많을 때는 어느 클래스가 어느 패키지에 속하는지 
					//	구별하기 어렵다는 단점이 있다.

한가지 더 알아두어야 할 것은 import문에서 클래스의 이름 대신 '*'을 사용하는 것이 하위 패키지의 클래스까지 포함하는 것은 아니라는 것이다.

import java.util.*;
import java.text.*;

import java.*;	// 위의 두 문장 대신 이렇게 할 수는 없다.

0개의 댓글