패키지
- 클래스는 데이터와 메서드를 묶어 캡슐화한 것이다.
- 패키지는 클랫스를 묶어서 캡슐화한 것이다.
오늘의 운세 프로그램
- 오늘의 날짜와 대길, 길, 중길, 소길, 흉 중 하나의 운세를 표시하자.
import java.util.GregorianCalendar;
import java.util.Random;
public class LuckyDraw {
public static void main(String[] args) {
GregorianCalendar today = new GregorianCalendar();
int y = today.get(GregorianCalendar.YEAR); //연
int m = today.get(GregorianCalendar.MONTH) + 1; //월
int d = today.get(GregorianCalendar.DATE); //일
System.out.printf("오늘은 %04d년 %02d월 %02d일 입니다.\n", y, m, d);
Random rand = new Random();
int k = rand.nextInt(10); // 운세: 0~9의 난수
System.out.print("오늘의 운세는 ");
switch(k) {
case 0: System.out.print("대길 "); break;
case 1: case 2: case 3: System.out.print("길 "); break;
case 4: case 5: case 6: System.out.print("중길 "); break;
case 7: case 8: System.out.print("소길 "); break;
case 9: System.out.print("흉 "); break;
} //case
System.out.println("입니다.");
} // main
} // LuckyDraw
결과
오늘은 2020년 05월 28일 입니다.
오늘의 운세는 소길 입니다.
- import java.util.GregorianCalendar;
에서 GregorianCalendar 클래스는 java 패키지 안에 util 패키지에 속해 있다. - 클래스는 논리적으로 패키지에 속하며, 패키지는 역시 패키지로 계층화가 가능하다.
- 클래스와 패키지는 '.'으로 연결해 사용한다.
형 임포트 선언 (type import declaration)
- 단일형 임포트 선언 (single-type-import-declaration)
import java.util.GegorianCalendar
다음과 같이 단일 클래스 명칭으로 직접 import 하는 것이다
- 온 디맨드형 임포트 선언(type-import-on-demand declaration)
import java.util.*;
다음과 같이 java.util 패키지 안에 있는 모든 클래스를 import하는 선언문이다. *를 이용하면 클래스 이름 일일이 import 할 필요가 없다.
java.lang
패키지는 Object클래스, Math클래스, String클래스를 포함하고 있다. java.lang 패키지는 자동으로 임포트된다.
정적 임포트 선언(static import declaration)
클래스에서 다음의 정적 멤버를 따로 임포트할 수 있다.
- 클래스 변수( static field )
- 클래스 메서드 ( static method )
다음과 같이 적용할 수 있다.
import java.util.GregorianCalendar;
import java.util.Random;
import static java.util.GregorianCalendar.*; // import static
public class LuckyDraw {
public static void main(String[] args) {
GregorianCalendar today = new GregorianCalendar();
int y = today.get(YEAR); //연 Gragorian 클래스의 정적 필드 사용
int m = today.get(MONTH) + 1; //월
int d = today.get(DATE); //일
System.out.printf("오늘은 %04d년 %02d월 %02d일 입니다.\n", y, m, d);
Random rand = new Random();
int k = rand.nextInt(10); // 운세: 0~9의 난수
System.out.print("오늘의 운세는 ");
switch(k) {
case 0: System.out.print("대길 "); break;
case 1: case 2: case 3: System.out.print("길 "); break;
case 4: case 5: case 6: System.out.print("중길 "); break;
case 7: case 8: System.out.print("소길 "); break;
case 9: System.out.print("흉 "); break;
} //case
System.out.println("입니다.");
} // main
} // LuckyDraw
패키지 선언
클래스를 특정 패키지에 포함시키는 것이 패키지 선언이다.
package 패키지명;
- 패키지 선언은 없어도 된다. 패키지 선언은 클래스당 1번만 사용할 수 있다.
- 패키지 선언이 없다면 무명 패키지(unnamed package)로 분류된다. 패키지가 없는 것이 아니라, 말 그대로 무명 패키지에 소속된다.
- 하나의 패키지 안에 동일한 이름의 패키지와 클래스가 존재해서는 안된다.
- 패키지명의 첫 글자는 소문자, 클래스명의 첫 글자는 대문자를 사용하는 것이 원칙이다.
클래스의 접근 제어
- 클래스의 접근 제어는 다음의 2가지로 나눌 수 있다.
- 여기서 멤버는 클래스에 포함된 정적, 비정적 field와 method 모두를 뜻한다.
- public 멤버
패키지와 관계 없이 내부든 외부든 클래스를 사용할 수 있다. public 클래스의 이름과 파일명은 일치해야 한다. - protected 멤버
패키지 내부에서만 이용할 수 있다. 다른 패키지에 속해 있는 클래스에서 호출할 수 없다. 해당 패키지 내부 뿐만 아니라 상속된 다른 패키지의 클래스에서도 사용할 수 있다. - 기본 (선언 없음) 멤버
동일 패키지 내에서만 이용할 수 있다. 다른 패키지에 속하는 클래스에서는 호출할 수 없다. - 비공개(private) 멤버
선언된 클래스 내부에서만 이용할 수 있다. 같은 패키지 내부에서도 호출할 수 없다.
- public 멤버
'Java > Java 기초' 카테고리의 다른 글
Java19 클래스의 상속과 다형성 (0) | 2020.05.26 |
---|---|
Java18 래퍼 클래스(wrapper class) (0) | 2020.05.25 |
Java16 클래스 초기화 블록과 인스턴스 초기화 블록 (0) | 2020.05.18 |
Java15 클래스 변수, 클래스 메서드와 유틸리티 클래스 (0) | 2020.05.16 |
Java14 클래스 접근자와 인스턴스 배열 (0) | 2020.05.15 |