-
[live-study] 7주차 :: 패키지JAVA/라이브 스터디 | whiteship 2021. 1. 24. 21:46
참고도서 : Java의 정석, Java in a Nutshell
1. Package 키워드
패키지(Package)란
- 패키지란 클래스의 묶음이다.
- 패키지는 클래스를 그룹으로 묶어서 효율적으로 관리 할 수 있다.
- 패키지가 다르면 같은 이름의 클래스일지라도 서로 다른 패키지내에서 존재할 수 있다.
- 즉, 지금까지 단순히 클래스 이름으로 표현을 했지만, 사실 클래스의 실제 이름 (full name)에는 패키지명이 포함되어 있다.
- 클래스가 물리적으로는 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리로 볼 수 있다.
- 예를 들어, Bus라는 패키지와 Car라는 패키지를 만들었다고 가정한다. 각 패키지 안에는 같은 이름의 클래스 파일 Driver가 존재하지만, 문제가 생기지 않는다. 또한, 클래스파일(.class)는 해당 디렉토리(package)로 구분 되어 있는 것을 확인 할 수 있다.
Package 선언
- 패키지는 보통 소문자로 표현한다.
- 패키지는 하나의 소스파일에 대해서 첫 번째 줄(주석과 공백을 제외한)에 위치해야하며, 모든 클래스는 반드시 하나의 패키지에 속하게 된다.
- 하지만, 지금까지 패키지를 따로 만들지 않아도 문제가 되지 않았던 것은 패키지를 지정하지 않더라도 이름없는 패키지(unnamed package)에 클래스가 자동적으로 속하게 되기 때문이다.
- 또한, 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
2. import 키워드
import
- 패키지명이 다른 클래스를 사용하려면 어떻게 해야할까. 사용하고자 하는 클래스 앞에 패키지명을 앞에 붙여 사용할 수도 있을 것이다. 하지만, 너무 길고 중복되서 사용되는 경우가 많기 때문에 import를 이용하여 클래스의 패키지를 미리 명시해둔다.
- 즉, import문은 컴파일러에게 소스파일에 사용된 클래스의 패키지 정보를 제공하는 역할을 한다. 컴파일러는 컴파일시 import문을 통해 소스파일에 사용된 클래스의 파일을 알아낸 후, 클래스 이름 앞에 패키지명을 붙여준다.
- import는 프로그램 성능에 영향을 미치지 않는다. 컴파일 시간이 아주 조금 더 걸릴 뿐이다.
import 선언
- 소스파일(.java)에서 주석 공백을 제외하고, package -> import -> class 문 순서로 위에서 아래로 위치하게 된다.
- 패키지는 반드시 하나만 존재해야했지만, import는 여러 번 선언이 가능하다.
- 또한, import를 선언하는 방법을 두 가지가 있다.
- 첫 번째는 패키지 하나에 대해서 클래스명을 하나하나 불러오는 방법이 있고, 또 다른 방법은 공통된 패키지명 뒤에 '*' 을 붙여서 한꺼번에 불러오는 방법이 있다.
- 두 번째 방법처럼 클래스명을 생략하고 * 로 표현할 때 주의할 점은 클래스의 이름 대신 *을 사용하는 것이 하위 패키지의 클래스까지 포함하는 것은 아니라는 것이다.
- 패키지가 명시 되어야 사용을 할 수 있다고 하였는데, java.lang패키지의 클래스들은 지금까지 패키지를 따로 import 하지 않고도 사용할 수 있었다. 아래와 같이 모든 소스파일에 묵시적으로 명시되어 있기 때문이다.
static import
- static import문을 사용하면 static 멤버들을 호출할 때 클래스 이름을 생략할 수도 있다.
3. 클래스패스
클래스패스(classpath)
- 클래스패스(classpath)는 컴파일러 (javac.exe)나 JVM이 등이 클래스의 위치를 찾는데 사용되는 경로이다.
- 클래스패스를 지정하지 않으면 기본적으로 현재 디렉토리에서 찾는다.
- 그래서 예를 들어, 현재의 디렉토리에서 컴파일하여 만들어진 .class 파일을 다른 디렉토리로 옮기면 어떤 일이 일어날까. 아래와 같이 ClassNotFoundException이 발생하게 될 것이다.
4. CLASSPATH 환경변수
CLASSPATH 환경변수
- 환경변수는 운영체제에 지정하는 변수로 JVM과 같은 어플리케이션들은 환경변수의 값을 참고하여 동작하게 된다.
- 자바는 클래스 패스로 환경변수 CLASSPATH를 사용하하는데, 이 값을 지정하면 실행할 때마다 -classpath 옵션을 사용하지 않아도 되어 편리하다. 하지만, 운영체제를 변경하면 클래스패스가 사라지기 때문에 이식성 면에서는 불리할 수 있다.
- 윈도우 기준 제어판 - 시스템 - 고급 시스템 설정 - 환경변수 - 새로만들기에서 지정할 수 있다.
5. -classpath 옵션
-classpath
- 위와 같이 .class 파일이 다른 디렉토리로 옮겨져도, 실행 시에 -classpath (-cp) 옵션을 이용해서 일시적으로 클래스패스를 지정해 줄 수도 있다.
6. 접근지시자
이전 스터디인 상속에서 먼저 다루어봤다.
void2017.tistory.com/154?category=825914
참고자료
'JAVA > 라이브 스터디 | whiteship' 카테고리의 다른 글
[live-study] 9주차 :: 예외 처리 (0) 2021.02.06 [live-study] 8주차 :: 인터페이스 (0) 2021.01.30 [live-study] 6주차 :: 상속 (0) 2021.01.09 [live-study] 5주차 :: 클래스 (0) 2021.01.01 [live-study] 4주차 :: 제어문 (0) 2020.12.31