[Java] 객체지향 프로그래밍(oop) - package와 import

SolChan Kim·2023년 12월 12일

📖패키지(package)

  • 서로 관련된 클래스와 인터페이스의 묶음이다.

  • 클래스가 물리적으로 클래스파일(*.class)인 것처럼,
    패키지는 물리적으로 폴더(디렉토리)이다.

 - java소스파일을 컴파일하면 클래스파일이 생기는 것처럼, 
   패키지는 폴더가 생성된다.
  
  - 폴더 안에 폴더를 생성할 수 있는 것처럼 
    패키지안에 서브패키지를 생성할 수 있다.(```.```으로 구분)
    -> java.lang : java패키지 하위에 lang패키지가 존재한다는 의미
  • 클래스의 실제 이름(full name)은 패키지명이 포함된 것이다.

    • String클래스의 full name : java.lang.String
  • rt.jar : Java API의 기본 클래스들을 압축한 파일

    • rt : runtime의 약자. JVM의 실행에 필요한 클래스들을 모아놓은 것
    • JDK설치경로\jre\lib에 위치


📖패키지 선언

  • 패키지는 소스파일에 첫 번째 문장(주석 제외)으로 단 한번 선언한다.
package 패키지명;
  • 하나의 소스파일에 둘 이상의 클래스가 포함된 경우,
    모두 같은 패키지에 속하게 된다.
    (하나의 소스파일에 단 하나의 public클래스만 허용한다.)

  • 모든 클래스는 하나의 패키지에 속하며, 패키지가 선언되지 않은 클래스는
    자동적으로 이름없는(unnamed) 패키지에 속하게 된다.


📖클래스패스(classpath) 설정

  • 업로드 예정

📖import문

  • 사용할 클래스의 패키지를 지정하는데 사용한다.

  • import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다.

    • java.util패키지의 Scanner클래스를 사용하려면 클래스 앞에
      패키지명을 붙여야 하지만, import문을 사용하면 패키지명 생략 가능
// java.util패키지에 속한 클래스들은 패키지명을 붙이지 않고 사용 가능
import java.util.*;

public class Hello {
	// import를 사용하지 않을 경우
	java.util.Scanner sc01 = new java.util.Scanner(System.in);
	
	// import를 사용할 경우
	Scanner sc02 = new Scanner(System.in);
}
  • java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다
    • String, Object, System, Thread ...
// import java.lang.*; import 생략

public class Hello{
	public static void main(String[] args){
        System.out.println("Hello!");
    }
}

📖import문의 선언 & 주의사항

import문은 패키지문과 클래스 선언 사이에 위치해야 한다.

  • 일반적인 소스 파일(.java)은 다음의 순서로 구성되어 있다.
패키지문

import문

클래스 선언

import문을 선언하는 방법은 다음과 같다.

import 패키지명.클래스명;
- 해당 패키지 하위에 특정 클래스만 import

import 패키지명.*;
- 해당 패키지 하위에 모든 클래스들을 import

import문은 여러 번 사용할 수 있다.

package java_basic.package_import;

import java.util.Scanner;
import java.util.Date;

public class Hello {
	public static void main(String[] args) {
		Scanner sc01 = new Scanner(System.in);
		
		Date date01 = new Date();
	}
}

import문은 컴파일 시에 처리되므로 프로그램에 아무런 영향이 없다.

  • import할 클래스의 이름을 일일이 적어주는 것보다
    편하게 별표를 사용하는 것이 좋다.
package java_basic.package_import;

import java.util.*;

public class Hello {
	public static void main(String[] args) {
		Scanner sc01 = new Scanner(System.in);
		
		Date date01 = new Date();
	}
}
  • import문은 지정된 패키지에 포함된 클래스들만을 import할 수 있다.
    • 서브패키지에 속하는 클래스들 까지 import하지는 못한다.
// 1과 2는 서로 다른 의미를 가지고 있다.

// 01. java패키지 하위에 util패키지와 text패키지 안에 모든 클래스 import
import java.util.*;
import java.text.*; 

// 02. java패키지 하위에 포함된 패키지들의 클래스들만 import
import java.*;

여러 패키지를 import할 때 같은 이름의 클래스가 있는 경우, 해당 클래스를 사용할 때 패키지명을 붙여줘서 어느 패키지의 클래스인지 구분할 수 있게 해야 한다.

import java.sql.*; // java.sql.Date
import java.util.*; // java.util.Date

public class ImportTest{
	public static void main(String[] args){
    	java.util.Date today = new java.util.Date();
    }
}

0개의 댓글