본문 바로가기

Languages/Java

[Java] 패키지, 접근제어자

패키지

  • 클래스를 체계적으로 관리하기 위한 도구. 작성한 클래스들을 구분 짓는 폴더와 비슷함.
  • 클래스들을 분류하지 않아 이름이 중복되거나 클래스의 기능이 혼동되는 상황 방
  • 패키지의 물리적인 형태는 파일 시스템의 폴더이지만, 폴더의 기능만 하는 것이 아니라 클래스의 일부분임

 

패키지 선언문 : "package c.javapackage;"

  • 소스의 가장 첫 줄에 있어야만함. package 선언 위에 주석, 공백은 상관없음. 하지만 다른 자바 문장이 있으면 컴파일 오류
  • 패키지 선언은 소스 하나에는 하나만 있어야함. 소스 파일이 두개의 폴더에 한번에 존재할 수 없기 때문
  • 패키지 이름과 위치한 폴더 이름이 같아야함.

패키지 이름 규칙

  • java로 시작하면 안됨
  •  모두 소문자로.
  • 자바의 예약어x

*컴파일 할 때 javac c/javapackage/Package.java 처럼 /로 각 패키지를 구분하고, 자바 소스 이름을 지정해서 컴파일함.

 

import

  • import 뒤에 패키지이름.클래스이름을 명시해주면, 그 패키지에 있는 클래스를 사용하겠다는 것을 컴파일러에게 알려줌.->컴파일러가 해당 클래스가 패키지 안에 있음을 알고 컴파일해줌.
  • 패키지 안에 있는 모든 클래스를 import하고 싶은 경우 "import 패키지이름. *". 이때 *은 그 패키지에 선언된 클래스들만 import하고, 그 패키지의 하위 패키지에 선언된 클래스들은 import하지 않음.
package c.javapackage.sub.*;	//c.javapackage.sub 패키지에 있는 모든 클래스 import
  • import는 클래스 선언 전에 명시되어야함.
  • 같은 패키지 내의 클래스와 java.lang 패키지에 있는 클래스는 별도로 import할 필요가 없음.

 

import static

  • static한 변수(클래스 변수)와 static 메소드를 사용할 때 용이.
  • import static 패키지이름.클래스이름. static한 함수 or 변수 이름; 
  • import static 패키지이름.클래스이름.*;도 가능

 

package c.javapackage;

//import c.javapackage.sub.Sub;
//import static c.javapackage.sub.Sub.subClassStaticMethod;
//import static c.javapackage.sub.Sub.CLASS_NAME;
import static c.javapackage.sub.Sub.*;

public class Package{
  public static void main(String[] args){
    //System.out.println("Package class.");
    //Sub sub=new Sub();
    //Sub.subClassStaticMethod();
    //System.out.println(Sub.CLASS_NAME);
    subClassStaticMethod();
    System.out.println(CLASS_NAME);
  }
}

접근 제어자

  • public
  • protected : 같은 패키지 or 상속받은 경우
  • package-private : 접근 제어자 적지 않을 때. 같은 패키지 내에 있을 때만 접근 가능
  • private : 클래스 

public으로 선언된 클래스가 소스 내에 있다면, 소스파일 이름은 public인 클래스 이름과 동일해야만함. 한 소스파일 내에 public인 클래스가 두 개이면 안됨. 

'Languages > Java' 카테고리의 다른 글

[Java] 형변환, 다형성  (0) 2023.08.22
[Java] 상속  (0) 2023.08.22
[Java] 매개 변수 지정  (0) 2023.08.19
[Java] Static과 Static 블록  (0) 2023.08.11
[Java] 배열  (0) 2023.08.11