ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 7주차 과제 : 자바의 패키지
    Java/온라인 자바 스터디 2020. 12. 29. 17:21
    반응형

    목표

    자바의 패키지 학습하기


    학습할 것

    package 키워드

    import 키워드

    클래스패스

    CLASSPATH 환경변수

    -classpath 옵션

    접근지시자


    package 키워드

    클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함 시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다.

    클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 그래서 어떤 패키지에 속한 클래스는 해당 디렉토리에 존재하는 클래스 파일(.class)이어야 한다.


    package 특징

     - 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.

     - 모든 클래스는 반드시 하나의 패키지에 속해야한다.

     - 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.

     - 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.

     

    package 선언

    패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하며, 하나의 소스파일에 단 한번만 선언될 수 있다. 해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속하게 된다.

    패키지명은 대소문자를 모두 허용하지만, 클래스명과 쉽게 구분하기 위해서 소문자로 하는 것을 원친으로 하고 있다.

    소스파일에 자신이 속한 패키지를 지정하지 않은 클래스는 자동적으로 '이름 없는 패키지(unnamed package)'에 속하게 된다.


    package 선언하는 방법

    package 패키지명;


    import 키워드

    소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스명을 사용해야한다.

    클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스명에서 패키지명은 생략할 수 있다.

    import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음, 모든 클래스명 앞에 패키지명을 붙여 준다.


    import 선언

    모든 소스파일(.java)에서 import문은 package문 다음에, 그리고 클래스 선언 문 이전에 위치해야한다. 그리고 import문은 package문과는 달리 한 소스파일에 여러 번 선언할 수 있다.

    일반적인 소스파일(*.java)의 구성은 다음 순서로 되어 있다.

    1.package문

    2.import문

    3.클래스 선언


    import문을 선언하는 방법

    import 패키지명.클래스명;

    또는

    import 패키지명.*;


    클래스패스

    컴파일러(javac.exe)나 JVM 등이 클래스의 위치를 찾는데 사용되는 경로이다.


    클래스패스를 지정하는 방법

    1.환경 변수 CLASSPATH를 사용

    2.java runtime에 -classpath 옵션을 사용


    CLASSPATH 환경변수

    환경변수는 운영체제에 지정하는 변수로 JVM과 같은 애플리케이션들은 환경변수의 값을 참고해서 동작하게 된다. 자바는 클래스패스로 환경변수 CLASSPATH를 사용하는데 이 값을 지정하면 실행할 때마다 -classpath 옵션을 사용하지 않아도 되기 때문에 편리하다. 하지만 운영체제를 변경하면 클래스패스가 사라지기 때문에 이식성면에서 불리할 수 있다.


    -classpath 옵션

    컴파일러가 컴파일 시 참조할 클래스 파일을 찾기 파일 경로를 지정해주는 옵션이다.


    classpath 옵션을 사용하는 방법

    javac <options> <souce files> 


    Hello.java 파일이 C:/Java 디렉터리에 존재하고, 참조할 클래스 파일이 필요한 클래스 파일들이 C:/Reference 디렉토리에 위치한다면, javac -classpath C:/Reference C:/Java/Hello.java로 실행하면 된다. 실행 시에 단축어인 cp를 사용하여 javac -cp C:/Reference C:/Java/Hello.java로 실행해도 된다. 

    ';'를 구분자로 하여 여러 개의 경로를 classpath에 지정할 수 있으며, '.'는 현재 디렉터리를 의미하고, '..'는 현재 디렉터리의 상위디렉터리를 의미한다. 


    접근지시자

    접근 지시자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

    접근 지사자가 default임을 알리기 위해 실제로 default를 붙이지는 않는다. 클래스나 멤버변수, 메서드, 생성자에 접근 지시자가 지정되어 있지 않다면, 접근 지시자가 default임을 뜻한다.


    접근 지시자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자

    private - 같은 클래스 내에서만 접근이 가능하다.

    default - 같은 패키지 내에서만 접근이 가능하다.

    protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.

    public - 접근 제한이 전혀 없다.


    대상에 따라 사용할 수 있는 접근 제어자

     대상

    사용가능한 접근 제어자 

     클래스

     public, default

     메서드

     public, protected, default, private

     멤버변수

     지역변수

     없음 


    출처 : 자바의 정석


    참조 : https://github.com/whiteship/live-study/issues/7

    반응형

    댓글

Designed by Tistory.