1.3.2 패키지

애플리케이션의 규모가 커지고 작성하는 클래스의 수가 늘어나면 어느 정도 단위로

클래스를 모을 필요가 생긴다.(예를 들어 비슷한 기능의 클래스를 모으는 등). 이 때 이용하는 구조가 패키지이다.


패키지란?


패키지란 분류한 클래스의 집합을 폴더 단위로 나누어 관리하는 시스템을 말한다.

패키지명은 기점이 되는 폴더부터 대상 폴더까지의 구성을 폴더마다 점(.)으로 연결한 모습이다.


패키지명은 이름공간(namespace)으로서 다른 패키지와 식별하는 데 사용한다. 그러므로 패키지는 애플리케이션 내에서 고유하게 이름을 붙여야 한다.






그런데 왜 패키지가 필요한 것일까? 예를 들어 대규모 애플리케이션을 만들다 보면 무수히 많은 클래스 파일이 만들어져 클래스명이 중복될 때가 있다. 이 때 패키지를 달리해서 클래스를 구별할 수 있게 하는 것이다. 패키지가 달라지면 이름이 같은 클래스를 여러 개 만들 수 있다.


예를 들얼 좀 전의 '동물, 포유류', '동물.파충류' 패키지와 '개', '고양이' 등의 클래스를 가진 애플리케이션에 새로 '봉제인형' 패키지의 '개', '고양이', '뱀', '악어' 클래스를 추가할 수도 있다.


업무 애플리케이션용 패키지는 다른 애플리케이션(특히 서드파티 자바 제품)과 구별하기 위해 전 세계에서 유일무이하도록 이름을 설정해야 한다.


앱의 규모가 점차 커지면서 라이브러리라는 '도구 모음'을 사용하기도 하는데, 그때도 업무 앱 본체 클래스와 라이브러리 클래스를 구별할 수 있게 해야 한다.


자바에서는 관례적으로 회사 홈페이지에 사용하는 도메인명을 거꾸로 한 것으로 패키지명을 시작한다.


예를 들어 회사 도메인이 hanbit.co.kr이라면 kr.co.hanbit으로 시작하는 패키지를 만든다. 단, 패키지명에는 하이픈(-)을 허용하지 않으므로 도메인에 포함될 하이픈은 밑줄(_)로 대신 사용한다.


패키지 선언


패키지는 소스 파일 처음에 선언한다.

패키지를 선언하는 구문은 다음과 같다.


[구문] 패키지 선언

package 패키지명;


import 문

자바에서는 다른 패키지의 클래스를 사용하고 싶을 때 어느 패키지의 어느 클래스를 호출하는 지 구별하기 위해 다음과 같은 형식으로 클래스명을 나타낸다.


[구문]패키지명을 포함한 클래스 지정

패키지명.클래스명


예를 들어 자료형이 java.util.Date인 경우 Date 클래스를 나타내려면 java.util.Date라고 써야 한다. 하지만 이처럼 매번 패키지명을 포함한 클래스명을 기술하는 것은 번거롭기도 하고 코드를 읽기 어려워진다.


이런 문제를 해결하고자 자바에서는 다른 패키지의 클래스를 import문으로 선언할 수 있다.


임포트한 클래스는 이후에 클래스명만 기술하면 된다.(패키지까지 쓸 필요가 없다). import 문의 형식은 다음과 같다.


[구문] import 문의 형식

import 패키지명.클래스명;


예를 들어 java.util.Date를 임포트할 경우 다음처럼 기술한다.


예제1-4 java.util.Date 임포트

import java.util.Date;


*를 사용해 다음과 같이 기술하면 해당 패키지의 모든 클래스를 임포트할 수 있다.

단, 이클립스를 사용하면 import문을 자동으로 생성할 수 있으니 그다지 사용할 일은 없을 것이다.

(Ctrl + Shift + O)


[구문] 패키지의 모든 클래스를 임포트

import 패키지명.*;


*를 사용한 형식은 패키지 내의 클래스만 가리킨다. 그 아래 계층에 있는 패키지는 포함하지 않는다.

예를 들어 java.util.Date를 가져올 때 import 문을 다음과 같이 쓰면 안된다.


예제 1-5 잘못된 import 문 사용 예

import java.*;


또한 예외적으로 임포트가 필요 없는 경우도 있다.

java.lang 패키지가 그렇다. 이 패키지의 클래스는 자주 이용한다는 이유로 임포트를 하지 않아도 클래스를 사용할 수 있다.








































'프로그래밍 > JAVA' 카테고리의 다른 글

1.3.4 키워드  (0) 2019.01.22
1.3.3 접근제한자  (0) 2019.01.22
1.3 자바의 기본  (0) 2019.01.22
1.1.3 자바 애플리케이션 작성  (0) 2019.01.22
1.1.2 왜 자바일까?  (0) 2019.01.22
TAGS.

Comments