ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스터디 7주차] 패키지
    프로그래밍 언어/JAVA 2021. 6. 20. 17:52
    더보기
    목표: 자바의 패키지에 대해 학습

     

     

    1. package 키워드

    패키지(package)는 자바에서 클래스를 체계적으로 관리하기 위해 사용한다.

    클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜서 복잡한 프로그램이 되어 유지 보수가 어려워 진다.

     

    우리가 마치 어떠한 파일(한글, 이미지, 동영상 등)을 폴더에 저장하는 것처럼 클래스를 파일이라고 생각하고 그 파일들을 특정한 패키지로 묶어서 관리하는데 패키지를  폴더라고 비유하면 이해하기 편하다.

    실제로, 패키지의 물리적인 형태는 파일 시스템의 폴더이고 패키지는 클래스를 컴파일하는 과정에서 자동적으로 생성되는 폴더이다.

     

    하지만, 패키지가 단순히 클래스를 저장하여 담고 있는 폴더 기능만 하는 것이 아니라 클래스의 일부분으로서 식별자 역할을 한다.

    예를 들어, 이름이 A인 클래스가 2개 존재하는데 서로 다른 패키지에 담겨져 있다면 다른 클래스로 인식한다.

     

    패키지를 선언하는 방법은 package 키워드를 사용하면 된다.

    pakage 상위패키지.하위패키지;
    public class ClassName {
    }

    여기서, 패키지 이름을 지을 때 지켜야할 규칙이 있다.

    - 숫자로 시작하면 안되고, _와 $를 제외한 특수 문자 사용이 불가하다.

    - java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용자가 사용할 수 없다.

    - 모두 소문자로 작성하는 것이 관례이다.

     

     

     

    2. import 키워드

    클래스들이 같은 패키지에 속해있다면 추가적인 코드없이 다른 클래스를 사용할 수 있지만

    서로 다른 패키지에 속한 클래스를 사용하려면 추가적인 작업이 필요핟.

    먼저, 첫 번째 방법으로 패키지와 클래스를 모두 기술하는 것이다.

    // com.myroom 패키지에 선언된 book 클래스
    pakage com.myroom
    
    public class Book {
    
    }
    
    // com.tworoom 패키지에 선언된 chair 클래스
    pakage com.tworoom
    
    public class Chair {
        // 다른 pakage에 담긴 book 클래스를 사용하려면 아래와 같이 선언해야됨.
        com.myroom.Book book = new com.myroom.Book();
    }

     

    두 번째 방법은 import 키워드를 사용하는 것이다.

     

    // com.myroom 패키지에 선언된 book 클래스
    pakage com.myroom;
    
    public class Book {
    
    }
    
    // com.tworoom 패키지에 선언된 chair 클래스
    pakage com.tworoom;
    
    import com.myroom.Book;
    
    public class Chair {
        Book book = new Book();
    }

    만약, com.myroom 패키지에 담긴 모든 클래스를 불러오고 싶다면 아래와 같이 선언하면 된다.

    com.myroom.*  (*는 패키지에 속하는 모든 클래스를 의미한다.)

    import키워드를 사용하여 선언할 수 있는 import문의 개수는 제한이 없다.

     

    패키지 이름이 길다면 import문 한 번 쓰는 것이 매우 편리하다.

    하지만, 첫 번째 방법만 사용해야할 경우가 존재한다.

    서로 다른 A, B 패키지가 존재하는데 두 패키지 모두 art라는 클래스가 있다고 가정해보자.

    import문으로 A, B 패키지를 불러와서 art 클래스를 사용한다면 어느 패키지의 art 클래스인지 컴파일러는 알 수가 없어 컴파일 에러가 발생한다.

    그래서, 위 같은 경우에는 art 클래스를 사용할 때 첫 번째 방법을 사용해야한다.

     

     

     

    3. 클래스패스 (CLASSPATH)

    클래스패스는 JVM이나 Java 컴파일러에 사용자정의 클래스와 패키지의 위치를 지정해주는 파라미터로

    JVM이 프로그램을 실행할 때, 클래스파일을 찾기 위해 클래스 패스를 사용한다.

    이러한 클래스패스를 지정하는 방법은 CLASSPATH 환경변수 사용, -classpath 옵션 사용 2가지가 있다.

    만약, 클래스패스를 지정해주지 않는다면 현재 디렉토리가 클래스패스로 지정된다.

    그러면 클래스패스를 지정하는 방법 2가지를 아래에서 자세히 알아보자.

     

     

     

    4. CLASSPATH 환경변수

    classpath 환경변수로 지정하는 방법은 다음과 같다.

    제어판 > 시스템 > 고급 시스템 설정 > 환경 변수로 들어가게되면 위와 같은 창을 볼 수 있다.

    여기서 컴퓨터 시스템 변수 설정을 통해 지정할 수 있는데 이렇게 지정한 classpath는 JVM이 시작될 때 JVM의 클래스 로더가 설정된 환경 변수를 호출한다.

    환경 변수에 설정되어 있는 classpath가 호출되면 그 디렉토리에 있는 클래스들을 먼저 JVM에 로드한다.

    그러므로 CLASSPATH 환경 변수에는 필수 클래스들이 위치한 디렉토리를 등록하도록 한다.

     

     

     

    5. -classpath 옵션

    -classpath 옵션은 컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해서 컴파일시 파일 경로를 지정해주는 것으로 클래스패스를 지정할 수 있다.

    사용 예시를 보며 알아보자.

    Ratel.java파일이 C:\whiteship에 존재하고 Ratel.java파일에 쓰인 클래스 파일들이 C:\whiteship\study에 있다면

    javac -classpath C:\whiteship\study C:\whiteship 

    위 코드로 클래스패스를 지정해주면 된다.

    만약에 Ratel.java에 쓰인 클래스들이 C:\whiteship\study외 다른 곳(C:\whiteship\random)에 존재한다면

    javac -classpath C:\whiteship\study; C:\whiteship\random C:\Java\Hello.java

    으로 디렉토리 사이에 ;(세미콜론)으로 구분지어서 선언해주면 된다.

     

    댓글

Designed by Tistory.