본문 바로가기

JAVA

[JAVA] 패키지란?

패키지

관련있는 클래스들을 하나로 묶는 것

- 서로 관련된 클래스를 하나의 단위로 모을 수 있음. 

- 세밀한 접근 제어 구현 가능 (ex. 패키지 안의 클래스들을 패키지 안에서만 사용하도록 선언 가능함. 그럼 패키지 외부에서는 클래스를 사용할 수 없음. 즉, 클래스들이 캡슐화될 수 있는 방법임.)

- 이름 충돌 피함 -> 자바에서는 모든 클래스가 서로 다른 이름을 가져야 함. 하지만 패키지만 다르면 클래스 이름이 같아도 상관 없음.

 

패키지 종류

1. 내장 패키지 : 자바 기본 제공 패키지 (ex. lang, util, awt, javax, swing, net, io, sql)

2. 사용자 정의 패키지 : 사용자 정의 패키지 

 

패키지 선언

* 패키지 선언은 코드의 무조건 맨 첫 줄에 선언

- Circle 클래스를 graphics 패키지에 속하게 하는 코드

package graphics;

public class Circle {
	double radius;
}

- pkg1 패키지 안에 pkg2 패키지를 속하게 하는 코드

package pkg1.pkg2;

 

이클립스에서 패키지 만들기

1. File - New - Java Project  =>  'test' 이름의 프로젝트 생성

2. src 폴더 마우스 오른쪽 - New - Pakage  =>  'graphics' 패키지 이름 입력

3. graphics 패키지 마우스 오른쪽 - New - Class  =>  사용자가 원하는 클래스 생성

 

패키지 안 클래스 사용하기

1. 완전한 이름으로 참조하기 (잘 쓰지 않는 클래스를 사용할 때)

- graphics 패키지 안에 있는 Rectangle 클래스의 정식 이름은 graphics.Rectangle 임.

graphics.Rectangle myRect = new graphics.Rectangle();

2. 원하는 패키지 멤버만 포함하기 (특정 클래스만 사용할 때)

- 외부 패키지의 특정 멤버를 import 하면, 클래스 이름만 사용하여 참조 가능함.

import graphics.Rectangle;

Rectangle myRect = new Rectangle();

3. 전체 패키지 포함하기 (대부분의 클래스를 사용할 때)

- 별표 문자를 이용함

import graphics.*; // 패키지의 모든 클래스 포함

Rectangle myRect = new Rectangle();

 

*단, 똑같은 이름을 가진 클래스를 포함한 패키지들을 사용할 때는 1번의 방법을 이용해야 함.

import A;
import B;

A.Order o1 = new A.Order();
B.Order o2 = new B.Order();

 

정적 import 문장

- 클래스 안에 정의된 정적 상수, 정적 메소드를 사용하는 경우

ex.  java.lang.Math 클래스 안에 정적 상수 PI와 정적 메소드 sin(), cos(), tan() 가 정의되어 있음.

 

1. 정적메소드와 정적상수 앞에 클래스 이름 붙이기

double r = Math.cos(Math.PI * 3);

2. 정적 import 문장 사용하기

import static java.lang.Math.*;
double r = cos(PI * 3);

 

예제 코드

//lib 패키지 클래스

package lib;

public class Calculator {
	public int add(int a, int b) {
		return a + b;
	}
}
//main 패키지 안 클래스

package main; //main 패키지 안에 포함되어 있음
import lib.*; // lib 패키지 안에 있는 모든 멤버 사용 가능하게 함

public class PackageTest {

	public static void main(String[] args) {
		Calculator obj = new Calculator();
		System.out.println(obj.add(100, 200));
	}

}
출력 결과
300

'JAVA' 카테고리의 다른 글

[JAVA] JUnit  (0) 2024.06.27
파일 입출력 - 객지설 13주차  (0) 2024.06.01
상속과 구성 - 객지설 12주차  (0) 2024.05.27
컬렉션/ArrayList/HashSet - 객지설 11주차  (0) 2024.05.23
제네릭 - 객지설 10주차  (0) 2024.05.17