일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- throwable
- 합병 정렬
- 람다식
- annotation processor
- 제네릭 와일드 카드
- 브릿지 메소드
- docker
- 스파르타코딩클럽
- auto.create.topics.enable
- 바운디드 타입
- System.in
- 제네릭 타입
- github api
- junit 5
- Switch Expressions
- Study Halle
- System.err
- 익명 클래스
- 자바스터디
- 접근지시자
- 정렬
- 항해99
- 프리미티브 타입
- 로컬 클래스
- 함수형 인터페이스
- 상속
- System.out
- 자바할래
- raw 타입
- yield
- Today
- Total
코딩하는 털보
STUDY HALLE - 7주차 본문
STUDY HALLE
7주차 : 패키지
목표
자바의 패키지에 대해 학습하세요.
학습할 것
- package 키워드
- import 키워드
- 클래스패스
- CLASSPATH 환경변수
- -classpath 옵션
- 접근지시자
package 키워드
자파 패키지는 여러 자바 클래스들을 구분하여 담고있는 정리함이다.
패키지는 Jar 파일로 압축할 수 있어서 클래스들을 하나씩이 아닌 묶음으로 더 빠르게 다운로드할 수 있게 한다.
클래스가 속하는 패키지는 package
라는 키워드와 함께 지정된다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다.
package 패키지이름;
만약 클래스가 특정 패키지내에 들어간다면 java 명령어로 실행시 패키지 이름을 주어야한다.
package myclass.util;
public class MyClass{
...
}
javac MyClass.java;
java myclass.util.MyClass;
참조 : 위키백과 자바 패키지
import 키워드
다른 패키지의 클래스들을 사용하려면 import
선언과 함께 패키지로부터 클래스들을 가져올 수 있다.
java.awt.event 패키지의 모든 클래스 가져오기
import java.awt.event.*;
java.awt.event 패키지에서 ActionEvent 클래스만 가져오기
import java.awt.event.ActionEvent;
import 한 클래스들은 우리가 알고있는 객체 생성 구문으로 인스턴스로 생성할 수 있다.
ActionEvent myEvent = new ActionEvent();
또는 import 없이 바로 객체를 생성할 수 있는데, 아래와 같이 객체 생성 구문에서 직접 패키지와 클래스를 선언하는 것이다.
java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();
참조 : 위키백과 자바 패키지
클래스패스
클래스 및 패키지의 경로를 지정하는 자바가상머신(JVM,Java Virtual Machine) 또는 Java 컴파일러의 매개 변수이다.
클래스패스를 지정함으로써 JVM은 자바를 실행할 때 필요로하는 클래스 또는 패키지를 로드할 수 있다.
자바 애플리케이션이 사용하고 있는 클래스가 여러 경로에 분산되어 있을 때 사용한다.
public class Test {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student);
}
}
만약, Student.class 파일이 다른 경로에 있다면 일반적인 구문으로 실행 될까?
[/Users/ijeong-in/Documents]> java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Student
at Test.main(Test.java:4)
Caused by: java.lang.ClassNotFoundException: Student
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
ClassNotFoundException 예외를 확인할 수 있다.
JVM이 실행에 필요한 클래스 파일(Student.class)를 찾지 못한 것이다.
우리는 클래스패스 설정을 통하여 이 문제를 해결할 수 있을것이다.
[/Users/ijeong-in/Documents]> java -classpath ".:student" Test
Student@515f550a
주의해야 할 점은 현재 실행하려는 클래스 파일의 위치를 고려해야 한다는 것.
만약 실행하려는 클래스 파일이 현재 디렉토리에 있다면 클래스패스로 현재 디렉토리도 같이 지정해야 한다.
#":"은 두개의 위치를 구분하기 위한 구분자이다.
#'.'은 현재 디렉토리를 의미한다.
java -classpath ".:DIR" ClassFile
참조 :
CLASSPATH 환경변수
클래스패스를 지정하는 운영체제의 환경변수이다.
JVM은 이 환경변수를 참조하여 자바를 실행한다.
Windows 환경변수 설정하기
//변수 설정
set CLASSPATH=.;C:\Users\Jeong\lib
//출력
echo %CLASSPATH%
Unix 계열 환경변수 설정하기
\[/Users/ijeong-in/Documents\]> export CLASSPATH=.:/Users/ijeong-in/Documents/student
\[/Users/ijeong-in/Documents\]> echo $CLASSPATH
.:/Users/ijeong-in/Documents/student
\[/Users/ijeong-in/Documents\]> java Test
Student@515f550a
-classpath 옵션
java 실행 명령어에서 사용할 클래스들의 위치를 가상머신에게 알려주는 옵션이다.
java -classpath "DIR" ClassFile
접근지시자
객체의 정보 은닉에 사용되는 키워드이다.
public : 접근을 제한하지 않고 완전히 공개한다.
private : 해당 클래스 내부에서만 접근을 허용한다.
protected : 해당 클래스 내부와 이 클래스를 상속받은 하위 클래스에서만 접근을 허용한다.
(상위 클래스의 private변수를 하위 클래스에서 public처럼 쓰고 싶을 때 사용)
default(아무 접근제어자도 사용하지 않았을 때) : 같은 패키지 내에서만 접근을 허용한다. (package-private)
동일한 패키지 내의 클래스들은 서로의 package-private 및 protected 접근제어자 멤버들에 접근할 수 있다.