Power Java 제20장 패키지
이번 장에서 학습할 내용 패키지는 연관된 클래스들을 묶는 기법입니다. 패키지의 개념 패키지로 묶는 방법 패키지 사용 기본 패키지 유틸리티 패키지
패키지란? 패키지(package) : 클래스들을 묶은 것 자바 라이브러리도 패키지로 구성 (예) java.net 패키지– 네트워크 관련 라이브러리 그림20-1. 패키지의 개념
예제
패키지 생성하기 Q: 만약 패키지 문을 사용하지 않은 경우에는 어떻게 되는가? A: 디폴트 패키지(default package)에 속하게 된다.
패키지의 이름 패키지의 이름은 일반적으로 소문자만을 사용한다. 패키지 이름으로 인터넷 도메인 이름의 역순을 사용한다. 예를 들면 com.company.mypackage이다. 자바 언어 자체의 패키지는 java나 javax로 시작한다.
이클립스에서 패키지 만들기 이클립스를 사용하는 경우는 프로젝트를 먼저 생성한 후에, src 폴더에 마우스를 두고 오른쪽 버튼을 눌러서 New S Package 메뉴를 선택하면 패키지를 생성할 수 있다.
중간 점검 문제
패키지 사용 경로까지 포함하는 완전한 이름으로 참조한다. 원하는 패키지 멤버만을 import한다.
완전한 이름으로 참조 graphics 패키지에 있는 Rectangle 클래스의 완전한 이름은 graphics. Rectangle이다. 객체를 생성할 때도 원칙적으로 다음과 같이 하여야 한다.
패키지 멤버를 import 외부 패키지의 특정한 멤버를 import하려면 다음과 같은 문장을 사용한다. import 문장은 package 문장 다음에 위치하여야 한다. 클래스가 포함되었으면 이제부터는 클래스 이름만 사용하여서 참조가 가능하다
전체 패키지 import 하나의 패키지 안에 포함된 모든 클래스를 포함하려면 다음과 같이 별표 문자(*)를 사용하면 된다 패키지 전체가 포함되면 패키지 이름을 생략하고 클래스 이름으로만 참조할 수 있다
계층 구조의 패키지 포함하기 여기서 한 가지 아주 주의해야할 사항이 있다. 패키지는 계층적으로 구성된 것처럼 보인다. 예를 들어 서 java.awt.*를 포함시키면 java.awt 아래 있는 모든 패키지, 즉 java.awt.font와 같은 java.awt 로 시작하는 모든 패키지가 포함될 거라고 생각하기 쉽다. 그러나 java.awt.font 패키지는 java.awt 패키지 안에 포함되지 않는다. 만약 java.awt.font의 멤버와 java.awt의 멤버를 동시에 사용하려면 다음과 같이 따로 따로 포함하여야 한다.
정적 import문장 클래스 안에 정의된 정적 상수나 정적 메소드를 사용하는 경우에 일반적으로는 클래스 이름을 앞 에 적어주어야 한다. 예를 들면 java.lang.Math 클래스 안에는 PI가 상수로 정의되어 있고, sin(), cos(), tan()와 같은 수많은 정적 메소드들이 정의되어 있다. 일반적으로 이들 정적 상수와 정적 메 소드를 사용하려면 다음과 같이 클래스 이름을 앞에 붙여야 한다. 하지만 정적 import 문장을 사용하면 클래스 이름을 생략하여도 된다
중간점검
소스 파일과 클래스 파일 관리 자바에서는 패키지의 계층 구조를 반영한 디렉토리 구조에 소스들을 저장하여야 한다. 완전한 클래스 이름 – graphics.Rectangle 파일의 경로 이름– graphics\Rectangle.java company라는 회사의 도메인 이름이 com.company이라면 graphics 패키지는 다음과 같은 디렉토리에 저장된다.
소스 파일과 클래스 파일 관리 소스 파일을 컴파일하면 컴파일러는 각 클래스들을 서로 다른 출력 파일로 저장한다. 출력 파일의 이 름은 클래스 이름과 같고, 확장자는 .class이다. 예를 들어서 소스 파일이 다음과 같다고 하자. 컴파일된 파일은 다음과 같이 저장된다
명령어 버전을 사용할때 graphics 패키지를 작성하고 이 패키지 안에 Rectangle. java를 넣으려면 디렉토리 구조도 똑같이 만들어 주어야 한다. 컴파일할 때는 작업 디렉토리에서 다음과 같이 컴파일한다
이클립스를 사용할 때 이클립스를 사용하여서 패키지 graphics를 생성하면 다음과 같은 디렉토리가 자동으로 생성된다. 즉 workspace 아래에 (작업디렉 토리)\myproject\src\graphics 디렉토리에 소스 파일들이 저장된 다. 또 (작업디렉토리)\myproject\bin\graphics 디렉토리에 컴 파일된 클래스 파일들이 저장된다. 특정한 디렉토 리를 지정하면 된다.
이클립스를 사용할 때 만약 컴파일된 클래스 파일의 위치를 변경하려면 프로젝트를 생성할 때 대화상자에서 특정한 디렉토 리를 지정하면 된다. 특정한 디렉토 리를 지정하면 된다.
CLASSPATH시스템 변수 설정 실행에 필요한 클래스 파일들이 저장되는 디렉토리를 클래스 경로(class path)라고 한다. 클래스 경로가 C:\classes이고 패키지 이름이 com.company.graphics라면 컴파일러와 JVM이 클래스 파일을 찾는 디렉토리는 다음과 같다
CLASSPATH시스템 변수 설정 자바에서 클래스 경로를 지정하는 방법은 다음과 같은 2가지이다. 환경 변수인 CLASSPATH를 설정한다. 현재 설정된 CLASSPATH 변수를 화면에 표시하려면, 보조 프로 그램의 명령 프롬프트에서 다음과 같은 명령어를 사용한다. 자바 가상 기계를 실행할 때 옵션 -classpath를 사용할 수 있다 만약 클래스 경로가 위와 같이 지정되었다고 가정하면 자바 가상 기계는 다음과 같은 순서로 클래스 파일을 탐색한다. C:\classes\graphics\Rectangle.class C: \lib\graphics\Rectangle.class .\graphics\Rectangle.class
JAR압축 파일 클래스 파일은 또한 JAR(Java archive) 파일 형태로 저장될 수 있다. 클래스 파일을 디렉토리의 계층 구조를 유지한 채로 압축 가능 클래스 경로에 지정하여 주면 된다.
자바에서 지원하는 패키지 패키지(package)는 연관되어 있는 클래스와 인터페이스들을 하나로 묶어 놓은 것이다. 자바의 기본 패키지는 java로 시작하며 확장 패키지는 javax로 시작한다.
자바에서 지원하는 패키지
java,lang 패키지 java.lang 패키지는 자바 프로그래밍에 필수적인 클래스들을 가지고 있기 때문에 import 문을 사용 하지 않아도 자동으로 포함된다. 다음과 같은 클래스들이들이 포함된다. Object 클래스: 기초적인 메소드를 제공하는 모든 클래스의 조상 클래스 Math 클래스: 각종 수학 함수들을 포함하는 클래스 Wrapper 클래스: Integer와 같이 기초 자료형을 감싸서 제공하는 랩퍼 클래스들 String 클래스, StringBuffer 클래스: 문자열을 다루는 클래스 Thread 클래스: 스레드 기능을 제공하는 클래스 Class 클래스: 객체를 생성한 클래스에 대한 정보를 얻기 위한 클래스
Math클래스
Math클래스
Math클래스
Class 클래스 Class 객체는 실행 중인 클래스를 나타낸다.
System 클래스 System 클래스는 실행 시스템과 관련된 속성과 메소드를 제공
System 클래스
Wrapper 클래스 기초 자료형을 객체로 포장시켜주는 클래스 (예) Integer obj = new Integer(10);
Wrapper 클래스
Integer 클래스가 제공하는 메소드
문자열 <-> 기초 자료형
오토 박싱(auto-boxing) Wrapper 객체와 기초 자료형 사이의 변환을 자동으로 수행한다.
StringBuffer 클래스 String 클래스는 주로 상수 문자열, 즉 변경이 불가능한 문자열을 나타낸다. StringBuffer와 StringBuilder 클래스는 변경 가능한 문자열을 나타낸다.
StringBuffer의 메소드
중간 점검 문제
java.util 패키지 자바에서 정수 10과 Integer(10)은 어떻게 다른가? 2. StringBuffer와 String은 어떻게 다른가?
java.util 패키지
Arrays 클래스
Arrays 클래스
실행결과
Date 클래스
실행결과
Calendar 클래스 Calendar 클래스는 추상 클래스로서 날짜와 시간에 대한 정보를 가지고 있고 특정 시각을 연도, 월, 일 등으로 변환하는 메소드도 가지고 있다. 시각은 1970년 1월 1일 00:00:00.000 GMT부터 흘러온 시 간으로 나타낸다. 현재 시각을 나타내는 객체를 얻으려면 다음과 같이 하면 된다
Calendar 클래스
예제
StringTokenizer 클래스 문자열을 분석하여서 토큰으로 분리시켜 주는 기능을 제공
예제
중간 점검 문제
Q & A