패키지 (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

+ Recent posts