7-12 패키지
패키지: 서로 관련된 클래스의 묶음.
java 8기준으로 약 4천개의 클래스가 있다.
이 많은 클래스를 묶지 않고 관리하려면 어렵다.
그래서 이 많은 클래스들을 작은 단위로 나눠서 저장하기 위한 것이 패키지이다.
소스파일을 컴파일하면 클래스는 클래스 파일로 된다.
패키지는 폴더다.
패키지 안에 클래스 파일들을 넣어놓은 것이다.
String의 실제 이름은 java.lang.String
java.lang.String은 자바 폴더 안에 lang 폴더 안에 있는 String 클래스 파일이다.
rt.jar: 자바 프로그램이 실행하는데 필요한 클래스들을 묶어 놓은 것
runtime: 실행할 때 실행중을 의미
jar(압축파일): 클래스 파일 묶어 놓은 것
java9부터 rt.jar파일은 없어졌다.
이때부터 모듈개념이 들어갔기 때문에.
rt.jar이 너무 커서 작은 모듈로 쪼개놨다.
jar은 압축파일이다.
7-13 패키지 선언
- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언
- 같은 소스파일의 클래스들은 모두 같은 패키지에 속하게 된다.
- 패키지 선언이 없으면 이름없는 패키지에 속하게 된다.
class PackageTest와 PackageTest2는 com.codechobo.book 패지키에 속한다.
default package: 패키지 선언이 없는 클래스들이 속하게 되는 패키지(이름 없는 패키지)
아래 소스파일을 컴파일 하면 com 폴더 아래, codechobo 폴더 아래, book 폴더 아래
클래스 파일이 존재하게 된다.
PackageTest.class를 실행하려면
앞에 java 쓰고 패키지 이름 com.codechobo.book.클래스이름 써줘야 실행된다.
com.codechobo.book패키지 < 패키지 구조를 이렇게 보기 좋게 한줄로 적어놨는데
원래는 com 아래 codechobo아래 book아래 있어야 된다.
이클립스가 이렇게 보여주는 것일뿐이다.
flat: 평평한, 반듯이
Hierarchical로 하면 실제 폴더 구조 그대로 보여준다.
겉으로는 flat하게 보이지만 실제로는 이 폴더들이 만들어져 있고,
클래스 파일들이 만들어져 있다.
그 안에 클래스 파일이 들어가 있다.
이걸 다 이클립스가 자동으로 해줘서 우리는 모르는데
실제로 우리가 이클립스 도움없이 할 줄도 알아야 한다.
일단 원리만 알고 나중에 직접 해보자.
bin폴더 - 컴파일된 클래스 파일(*.class)이 있는 곳
src폴더 - 소스 파일이(*.java) 있는 곳
PackageTest.class 파일을 이클립스 도움 없이 직접 실행하는 걸 해보자.
1. 커맨드창 열기 (Windows키 + r) + cmd 입력
2. java com.codechobo.book.PackageTest 입력하면
클래스 파일을 찾을 수 없다고 나온다.
왜 그럴까?
만약 우리의 컴퓨터가 데스크 드라이브가 1TB라면
그 넓은 공간에서 이 클래스 파일을 찾을 수 없다.
그래서 우리가 이 클래스 파일이 있는 위치로 이동해야 한다.
bin으로 이동해야한다. < 패키지 루트
cd 입력 후 C:\Users\gss98\workspace\ch07\bin 붙여넣기하고
java com.codechobo.book.PackageTest Enter 하면
Hello World! 가 커맨드 창에 출력된다.
이제는 왜 제대로 출력되는 것일까?
왜냐하면 Hello World!가 출력되는 클래스 파일이 위치한 곳으로 가서 실행하니까 되는 것이다.
기본적으로 파일을 찾을 때 현재 폴더를 찾는다.
그럼 매번 특정 폴더로 이동한 다음 실행해야되나?
이 불편함을 없애주려고 하는게 class pass
패키지 폴더가 들어있는 이 경로를 class pass에 저장해 놓으면
매번 불편하게 클래스 파일에 있는 패키지를 이동하지 않아도 실행시킬 수 있다.
7-14 클래스 패스
클래스 패스: 클래스 파일의 위치를 알려주는 경로(path)
환경변수: os랩에서 관리하는 변수
환경변수에 패키지의 루트를 등록해주면
아까처럼 명령창에서 실행할 때 현재 폴더에서 못 찾으면
이 클래스패스에 등록된 경로들을 순서대로 하나씩 보면서 찾는다.
제어판에서 환경 변수를 검색 - 시스템 환경 변수 편집 클릭 - 환경 변수 클릭
- 시스템 변수에 새로 만들기 클릭 후
변수 이름에 class path
변수 값에는 com.codechobo.book패키지의 루트를 복사 붙여넣기하고
확인 누른다.
환경변수 값이 바뀌면 커맨드 창을 새로 열어야 한다.
새 창을 열고 java com.codechobo.book.PackageTest을 입력하면 바로 실행이 된다.
아까처럼 패키지 루트로 이동하지 않고도 어느 곳에서나 실행할 수 있게 됐다.
이렇게 될 수 있는 이유가 뭘까?
클래스 패스에다가 com폴더가 있는 패키지 루트를 클래스 패스라는
환경변수에 등록을 해놨기 때문에 되는 것이다.
명령창에서 환경변수 클래스 패스 값을 확인하는 명령어: set classpath
그럼 클래스 패스라는 환경변수가 어떻게 셋팅되는지 알 수 있다.
이 값을 변경하려면 set classpath=C:\Users\gss98\workspace\ch07\bin;c:\jdk1.8\work\util.jar 쓰고
다시 set classpath를 치면 바뀐 걸 알 수 있다.
;(세미콜론)을 구분자로 해서 계속 뒤에 경로를 추가할 수 있다.
set classpath=C:\Users\gss98\workspace\ch07\bin;c:\jdk1.8\work\util.jar
찾을 때 앞에 있는 경로부터 찾는다.
C:\Users\gss98\workspace\ch07\bin; < 여기 없으면
c:\jdk1.8\work\util.jar 그 다음 이런식으로
jar파일은 경로가 아니지만 등록이 가능하다.
jar파일을 등록하면 jar파일 안에 압축 돼 있는 폴더들을 다 뒤진다.
제어판에 시스템 변수 편집을 통해서도 환경변수를 확인 및 변경할 수 있다.
'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-17~20 제어자, static, final, abstract (0) | 2022.08.25 |
---|---|
자바의 정석 기초편 ch7-15, 16 import문, static import문 (0) | 2022.08.25 |
자바의 정석 기초편 ch7-10,11 참조변수 super, 생성자 super() (0) | 2022.08.19 |
자바의 정석 기초편 ch7-7~9 오버라이딩 (0) | 2022.08.17 |
자바의 정석 기초편 ch7-5,6 단일 상속, Object클래스 (0) | 2022.08.17 |