도서/자바의 신

[도서/자바의 신] #9 자바를 배우려면 패키지와 접근 제어자는 꼭 알아야 해요

yulee_to 2022. 12. 21. 16:18

자바의 신

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 


패캐지는 그냥 폴더의 개념이 아니에요

패키지(package)는 클래스들을 구분짓는 폴더와 비슷한 개념이다.

자바 파일을 컴파일 할 때 슬래스로 각 패키지를 구분한 후 자바 소스 이름을 지정하여 컴파일이 가능하다.

그리고 항상 컴파일할 때는 가장 상위 디렉터리, 즉 root 디렉터리에서 실행을 해야만 한다.

 

패키지 선언문

package 상위 패키지.하위 패키지;
  • 소스의 가장 첫 줄에 위치해야 한다.
  • 패키지 선언은 소스 하나에는 하나만 있어야 한다.
  • 패키지 이름과 위치한 폴더 이름이 같아야 한다.
  • 패키지 이름을 java로 시작해서는 안된다.

패키지 이름은 이렇게 지어요

기본 규칙

패키지 시작 이름 내용
java 자바 기본 패키지(Java 벤더에서 개발)
javax 자바 확장 패키지(Java 벤더에서 개발)
org 일반적으로 비 영리단체(오픈 소스)의 패키지
com 일반적으로 영리단체(회사)의 패키지

패키지 이름은 모두 소문자로 지정하는 것이 좋고, 자바의 예약어를 사용하면 안된다.

import를 이용하여 다른 패키지에 접근하기

다른 패키지에 있는 클래스를 사용하려면 import를 해줘야 한다.

import 패키지 이름.클래스이름;

컴파일하면 import한 클래스를 먼저 컴파일하고 호출하는 클래스를 컴파일해준다.

클래스 이름 대신 "*"를 써주면 해당 패키지에 있는 모든 클래스들을 import해준다.

다만, 패키지 내의 클래스만 import하고 패키지 내의 하위 패키지에 선언된 클래스들은 import하지 않는다.

 

import한 클래스 내의 static 변수와 메소드를 사용하기 위해서는 "import static 패키지이름.클래스이름.static변수나 메소드 명;"을 해주면 된다. 물론 "*"을 이용해 모든 static한 변수나 메소드를 import해줄 수도 있다. 

또 다른 방법으로는 사용할 static 변수나 메소드 앞에 "클래스이름."을 써주면 된다.

 

import를 하지 않아도 되는 패키지

  • java.lang.패키지
  • 같은 패키지

자바의 접근 제어자

접근 제어자(Access modifier)

  • public : 누구나 접근 가능
  • protected : 같은 패키지 내에 있거나 상속받은 경우에만 접근
  • package-private : 아무런 접근 제어자를 적어주지 않을 때 설정되는 접근 제어자로, 같은 패키지 내에 있거나 해당 클래스 안에 있을 때만 접근 가능
  • private : 해당 클래스 내에서만 접근 가능
  해당 클래스 안 같은 패키지 상속 받은 클래스 import한 클래스
public O O O O
protected O O O X
package-private O O X X
private O X X X

메소드나 변수의 접근 권한을 지정하여 값의 변경이나 조회를 제어해주는데 접근 제어자가 사용된다.

클래스 접근 제어자 선언할 때의 유의점

접근 제어자는 메소드와 인스턴스 변수, 클래스 변수뿐만 아니라 클래스 선언문에도 사용된다.

클래스 선언시 반드시 파일 이름에 해당하는 클래스가 존재해야 한다.

같은 클래스 내에선 public 클래스가 둘 이상 존재할 수 없다.

public인 클래스가 존재한다면 이름이 파일의 이름과 같아야 컴파일된다.


정리해 봅시다

1. 패키지를 선언할 때 사용하는 예약어는 무엇인가요?

package

2. 패키지 선언은 클래스 소스 중 어디에 위치해야 하나요?

맨 위

3. 패키지를 선언할 때 가장 상위 패키지의 이름으로 절대 사용하면 안 되는 단어는 무엇인가요?

java

4. 패키지 이름에 예약어가 포함되어도 되나요?

NO

5. import는 클래스 내에 선언해도 되나요?

NO

6. 같은 패키지에 있는 클래스를 사용할 때 import를 해야 하나요?

NO

7. 특정 패키지에 있는 클래스들을 모두 import할 때 사용하는 기호는 무엇인가요?

패키지 이름 뒤에 .*를 붙여주면 된다.

8. 클래스에 선언되어 있는 static한 메소드나 변수를 import하려면 어떻게 선언해야 하나요?

import static 패키지이름.클래스이름.static한 메소드나 변수 이름;을 해주면 된다.

9. 접근 제어자 중 가장 접근 권한이 넓은 (어떤 클래스에서도 접근할 수 있는) 것은 무엇인가요?

public

10. 접근 제어자 중 가장 접근 권한이 넓은 (어떤 클래스에서도 접근할 수 있는) 것은 무엇인가요?

private

11. 접근 제어자 중 같은 패키지와 상속 관계에 있는 클래스만 접근할 수 있도록 제한하는 것은 무엇인가요?

protected

12. "Calculate.java"라는 자바 소스가 있을 경우, 그 소스 내에는 Calculate라는 클래스 외에는 (   )으로 선언된 클래스가 있으면 안된다.

public

728x90