일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- greedy
- Binary Tree
- Matrix
- Class
- simulation
- string
- implement
- geometry
- Counting
- 코테
- Method
- Number Theory
- SQL
- database
- 파이썬
- Data Structure
- java
- Stack
- dynamic programming
- sorting
- 코딩테스트
- 구현
- Math
- Binary Search
- hash table
- 자바
- array
- two pointers
- Tree
- bit manipulation
- Today
- Total
코린이의 소소한 공부노트
패키지와 클래스 경로 본문
자바에서 말하는 패키지란
1. 서로 관련된 클래스의 묶음을 나타낸다.
2. 이클립스 화면에서 Package Explorer를 보면 클래스는 클래스 파일(이름.class), 패키지는 클래스 파일을 담고 있는 폴더, 하위 패키지는 하위 폴더로 되어 있다. 이 말인즉슨 패키지 안에 패키지를 넣을 수 있다는 뜻이다.
3. 클래스의 실제 이름(full name)은 패키지를 포함한다. 우리가 알고 있는 문자열 String클래스의 풀 네임은 java.lang.String이다. java 패키지 안에 있는 lang 패키지에 String 클래스가 있다는 뜻이다.
패키지가 무엇인지는 알았으니, 한번 만들어보자.
필자가 공부할 때나 포스팅하기 전 코드를 돌려볼 때 practice라는 자바 프로젝트를 이용한다. 여기에 testpackage라는 이름의 패키지를 하나 만들어보려 한다. 이클립스에서는 패키지를 만드는 버튼이 따로 있지만, 난 패키지 선언이 해보고 싶으니 PackagePractice 클래스를 하나 만들어서 이것을 이용해 패키지를 만들어보도록 하겠다.
#1. 디폴트 패키지 안에 PackagePractice.java파일을 하나 생성했다. 잘 있는 것을 확인할 수 있다.
#2. 파일 첫 줄에 package testpackage; 라고 작성해 패키지를 선언했다. 그랬더니 에러가 발생했다. 에러 메시지의 내용은 "testpackge"라고 선언된 패키지는 "" 패키지와 맞지 않다는 것이다. 그러면서 2가지 해결책을 제시한다.
- 'PackagePractice.java' 파일을 'testpackage' 패키지로 옮기기
- 패키지 선언을 삭제하기
그래서 난 첫 번째를 선택했다.
#3. 이클립스가 알아서 패키지를 만들어 옮겨줬다.
패키지를 선언할 때 알아야 할 사항은 다음과 같다.
1. 패키지를 만들 때는 소스파일의 첫 번째 문장에 1번만 선언하면 된다.
// PackagePractice.java
package testpackage; // 패키지 선언 문장
public class PackagePractice {
// 코드코드...
}
2. 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.
// PackagePractice.java
package testpackage;
public class PackagePractice { }
class PackagePractice2 { } // 이것도 testpackage에 포함됨
3. 패키지 선언이 없으면 이름 없는 패키지(default package)에 속하게 된다.
- 패키지 선언이 없는 Javap.java 파일은 디폴트 패키지에 있다.
4. 패키지의 하위 패키지를 만들고 싶다면 선언할 때 마침표를 이용하면 된다.
5. 커맨드에서 클래스 파일을 실행시키려면 해당 프로젝트의 bin 폴더까지 이동한 후 패키지 이름까지 다 적어야 한다. 필자는 이런 식으로 접근해야 실행시킬 수 있었다.
C:\eclipse-workspace\practice\bin>java testpackage.lowerpackage.LowerPackage
그런데, 터미널에서 매번 이런 식으로 접근하려면 너무 귀찮다. 이름도 길고 경로도 길고 외우기 힘들다. 그래서 사용하는 것이 클래스 경로다.
[클래스 패스(경로)]
1. 클래스 파일의 위치를 알려주는 경로로,
2. 환경변수 classpath로 관리하며, 경로 간의 구분자는 세미콜론 ; 을 사용한다.
- 여러 클래스 패스를 사용하고 싶으면 경로1;경로2;경로3;... 등 추가해서 써주면 된다.
- 경로1에 갔는데 해당 파일이 없으면 경로2, 경로2에 갔는데 해당 파일이 없으면 경로3으로 이동한다.
- 그러므로 우리는 너무 길어지는 것을 신경 쓰지 말고 세미콜론을 이용해 경로를 쭉 추가해주면 된다.
3. classpath에 패키지의 루트를 등록해주면 자바 클래스 파일을 편하게 실행시킬 수 있다.
환경변수를 설정하는 방법은
#1. 제어판에서 환경변수라고 검색한 후 시스템 환경변수 편집을 클릭
#2. 고급 탭의 환경변수 클릭
#3. 시스템 변수의 새로 만들기 버튼 클릭
#4. 변수 이름에 classpath를, 변숫값에 해당 패키지의 루트가 되는 bin폴더까지의 경로를 입력 후 확인
#5. 쭉 확인을 눌러 열었던 모든 창을 다 닫기
환경변수 값이 바뀌면 커맨드 창을 닫았다 새로 열어야 한다. 이것까지 설정했다면 커맨드 창에서 패키지 루트로 이동하지 않고 어느곳에서나 java testpackage.lowerpackage.LowerPackage를 입력하면 실행된다.
[쿠키글] classpath 커맨드 창에서 확인해보기
set classpath라고 입력하면 현재 저장되어 있는 classpath를 볼 수 있다.
여기서 경로를 변경하고 싶다면 대입 연산자 =을 이용하면 된다.
이런 식으로 입력하면 = 오른쪽의 경로가 저장이 되고, 다시 set classpath를 쳐보면 변경된 것이 저장되어있는 것을 확인할 수 있다.
'Java' 카테고리의 다른 글
제어자 (0) | 2022.04.16 |
---|---|
임포트와 스태틱 임포트 (0) | 2022.04.14 |
생성자 super() vs 참조변수 super (0) | 2022.03.23 |
메서드 오버라이딩 (+오버로딩과의 차이점) (0) | 2022.03.22 |
클래스 간의 관계 - 상속, 포함 (0) | 2022.03.15 |