본문 바로가기

자바공부

자바 패키지 개념공부

728x90
반응형

명품 자바 6장

 

* 디렉터리를 자바에서는 패키지(package) 라고 부르고, 파일의 경로명은 점(.) 을 찍어서 표현한다.

패키지(package): 서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스(.class) 파일들을 한 곳에 묶어 놓은 것

즉, 패키지는 디렉터리와 연관되는데, 하나의 패키지는 관련된 클래스 파일들이 들어 있는 디렉터리라고 생각하면 된다.

JDK 9부터는 패키지들을 모듈(module) 단위로 묶어, 100개에 가까운 모듈을 제공한다.(.jmod) 확장자를 가진 압축 파일 형태

클래스를 지칭할 때는 모듈명은 사용하지 않고, 패키지명을 포함하는 경로명으로 나타낸다.ex) java.util.Scannerjava.util 패키지 내의 Scanner 클래스

 

* import는 다른 패키지의 클래스를 사용할 때, 컴파일러에게 그 클래스의 경로명을 알려주는 문으로 2가지 방법으로 사용할 수 있다.1) import 패키지.클래스; // 클래스의 경로명을 컴파일러에게 알려주는 문import java.util.Scanner;Scanner 클래스를 import하지 않는다면 Scanner 클래스를 사용할 때마다 클래스의 경로를 호출해야 한다.ex) (1) Scanner 클래스를 import 하지 않은 경우java.util.Scanner scanner = new java.util.Scanner(System.in)(2) Scanner 클래스를 import 한 경우import java.util.Scanner;...Scanner scanner = new Scanner(system.in);2) import 패키지.*; // 한 패키지에 있는 여러 클래스를 import 하고자 하는 경우, *를 사용하여 한 번에 선언할 수 있다.예를 들어 java.util 패키지에서 Scanner 클래스뿐만 아니라 다른 클래스도 사용한다고 하면 일일이 클래스마다 imprt 문으로 지정할 필요가 없다.

 

* 패키지 선언자바 소스 파일(.java)이 컴파일되어 생기는 클래스 파일(.class 파일)은 반드시 패키지에 소속되어야 한다. 클래스가 소속될 패키지 명은 package 키워드를 이용하여 소스 파일의 첫 줄에 선언한다.package 패키지명;ex) package UI; // Tools 클래스를 컴파일하여 UI 패키지에 저장할 것을 지시public class Tools{ // 이제 이 클래스의 경로명은 UI.Tools가 된다....}다른 패키지에 있는 클래스에서 Tools 클래스를 사용하기 위해서는 import UI.Tools;를 선언하면 된다.ex)

package Graphic; // Line 클래스를 Graphic 패키지에 저장

import UI.Tools; // Tools 클래스의 경로명 알림

public class Line{
	public void draw(){
    	Tools t = new Tools();
       }
}

ex) lib 패키지에 Calculator.java를 작성해보자

abstract class Calculator { // lib 패키지에 만들어진 Calculator 추상 클래스
	public abstract int add(int a, int b);
	public abstract int subtract(int a, int b);
	public abstract double average(int []a);
}
//////////////////////////////////////////////////////////////////
package app;
import lib.Calculator; // lib 패키지의 Calculator 클래스를 import

public class GoodCalc extends Calculator{ // app 패키지에, 추상 클래스Calculator를 상속받는 GoodCalc 클래스
	public int add(int a, int b) {
		return a+b;
	}
	public int subtract(int a, int b) {
		return a-b;
	}
	public double average(int[] a) {
		double sum=0;
		for(int i=0; i<a.length;i++) {
			sum+=a[i];
		}
		return sum/a.length;
	}
	public static void main(String[] args) {
		Calculator c = new GoodCalc();
		System.out.println(c.add(2, 3));
		System.out.println(c.subtract(2, 3));
		System.out.println(c.average(new int[] {2,3,4,}));
	}
}

 

* 디폴트 패키지(default package)

자바에서는 package 선언문을 사용하지 않고 자바 클래스나 인터페이스를 작성하면, 자바 컴팡이러는 클래스나 인터페이스를 디폴트 패키지(default package)에 소속 시킨다.

즉, 디폴트 패키지는 현재 디렉터리이다.

 

* 패키지의 특징

1) 패키지 계층 구조

상속 관계에 있는 클래스나 인터페이스의 경우, 서브 클래스 파일을 슈퍼 클래스 파일이 저장된 패키지의 서브 디렉터리에 패키지를 만들어 저장하여 계층화시키면 더욱 관리하기 쉽다.

 

2) 패키지별 접근 제한

패키지에 포함된 클래스들끼리는 자유롭게 접근하게 하고, 다른 패키지의 클래스들은 접근을 막음으로써 패키지를 접근 권한의 범위로도 이용할 수 있다.

 

3) 동일한 이름의 클래스를 다른 패키지에 작성 가능

같은 패키지 내에서는 동일한 이름을 가진 클래스나 인터페이스가 존재할 수 없다. 그러나 다른 패키지에서는 가능하다.

 

4) 소프트웨어의 높은 재사용성

클래스와 인터페이스를 잘 분류하여 패키지로 관리하면, 나중에 같거나 유사한 기능을 수행하는 클래스나 인터페이스는 재작성할 필요 없이 프로그램에 포함하여 쉽게 사용할 수 있다.

반응형