패키지 (Package)
- 패키지 선언 시 제약사항
- 소스의 가장 첫줄에 위치
- 패키지 선언은 소스에 하나만 존재
- 패키지 이름과 소스가 위치한 폴더 이름이 동일
- 패키지 이름을 java로 시작하면 안됨 (테스트해보기)
- 패키지 이름은 모두 소문자
- 자바의 예약어 사용금지
- 패키지 이름 지정
- java : 자바 기본 패키지 (Java 벤더에서 개발)
- javax : 자바 확장 패키지 (Java 벤더에서 개발)
- org : 일반적으로 비 영리단체(오픈소스)의 패키지
- com : 일반적으로 영리단체(회사)의 패키지
- 패키지 import
- 패키지 선언 아래, 클래스 선언 위에 위치
- 같은 패키지에 있는 클래스와 java.lang 패키지에 있는 클래스들은 import 안해도 사용가능.
- "패키지이름.클래스이름"을 명시하여 해당 클래스를 사용하겠다고 컴파일러에게 전달.
- 해당 경로에 관련 클래스의 java파일이 존재하면 그 클래스를 먼저 컴파일한 후 호출하는 클래스를 컴파일.
- import thispack.* 이렇게 작성했을 때 그 패키지에 선언된 클래스들만 사용 가능. 해당 패키지에 있는 모든 패키지를 import 하는 것이 아님.
ex) thispack.subpack 패키지에 있는 클래스 사용 불가.
- 패키지 import static
- import static은 static변수와 메서드를 사용하고자 할 때 용이. (클래스.변수 or 클래스.메서드로 클래스 이름을 지정하여 사용하는 것도 가능)
- 자신의 클래스에 있는 변수나 메서드와 import한 static변수나 static메서드가 동일한 이름을 가진다면?
자신의 클래스에 있는 static 변수나 메서드가 우선. - 여러 클래스를 import static 했을 때 static변수나 static메서드명이 겹친다면?
메서드 호출 시 "Ambiguous method call. Both" 이라는 메시지. (모호한 메서드 호출)
접근제어자
- public
- 모두 접근 가능
- protected
- 같은 패키지 내에 있거나 상속받은 경우에 접근 가능
- (부모 -> 자식 호출불가, 자식-> 부모 호출가능)
- package-private
- 같은 패키지 내에 있을 경우 접근 가능
- private
- 해당 클래스 안에서만 접근 가능
- 변수에 직접 접근해서 변경하지 못하게 하고 메서드를 통해서만 변경, 조회를 할 수 있도록 할 때
-> 변수를 private으로 선언하고 해당 변수를 조회하거나 변경하는 메서드를 생성.
- 클래스 접근제어자
- 클래스 선언문에 접근제어자 사용 가능.
- 하나의 클래스 소스에 여러 개의 클래스 선언 가능하되 public으로 선언된 클래스가 소스 내에 있다면, 그 소스 파일의 이름은 public인 클래스 이름과 동일해야함. (public class는 한 개 이자 이름과 같아야 함)
** cmd로 컴파일과 실행
workspace 디렉터리로 이동.
javac 명령어를 통해 슬래시(/)로 패키지를 구분하여 소스이름을 지정하고 컴파일.
컴파일된 클래스를 java 명령어를 통해 프로그램 실행.
C:\javaprac>javac c/javapack/Package.java
C:\javaprac>java c/javapack/Package.class
** java.lang.SecurityException: Prohibited package name: java
패키지 이름을 java로 하면 안된다.
반응형
'Java' 카테고리의 다른 글
자바의 신 VOL.1 기초 문법편 정리 (0) | 2024.01.06 |
---|---|
[JAVA] 상속 (0) | 2023.12.14 |
[JAVA] 참조자료형의 생성자와 메서드 (0) | 2023.12.14 |
[JAVA] 배열 (1) | 2023.11.30 |
[JAVA] 조건문과 반복문 (1) | 2023.11.23 |