오늘 친구랑 걸으면서
(그 친구는 JAVA 학교에서 수업을 듣는다.)
JAVA이야기를 했는데 벌써 상속까지 나간것 같았다.
몇 주 안된거 같은데..!

음.. 독학하면 속도가 느려진다 그래서 더 많은 시간을 투자해야겠다.!!
오늘은 클래스 패스와 패키지까지 공부했다.
(클래스 개념하고 패키지 개념을 이해하느라 오래걸렸다..)

클래스 패스란?
-> 클래스의 경로를 의미한다.
cmd 명령창을 열고 실행하면 그 위치의 디렉토리에서 .class를 찾아서 실행한다.


(예시)


위 예시는 .class가 부족하다. AAA와 BBB class는 mysubclass파일에 옮겨 놓았다.
이 경우는 저 디렉토리에서 cmd를 열고 java ClassPath를 실행하면 어떻게 될까?


(오류 메세지)


해당 디렉토리에 필요한 class를 찾을 수 없다는 에러 메세지가 뜬다.

클래스 패스를 잘 설정해주어야 한다.

제어판 들어가서 환경변수 설정을 할 수도 있지만 위와 같이 cmd명령창으로 환경 변수를 설정해 줄 수 있다.
set classpath=.;.\mysubclass;
cmd 명령창에 위와 같이 입력해주면 된다.
. 은 현재 해당 디렉토리이고, ; 은 끊어주는 것이다.
.\mysubclass 에도 클래스 패스를 설정해 주었다.


(클래스 패스 설정화면 후 오류없이 결과가 나오는 화면)


위 화면을 보면 오류없이 결과가 나온 것을 확인 할 수 있다.

패키지는 서로 다른 클래스들을 관리하기 위해 만든다.
많은 개발자들이 함께 만드는 과정에서 같은 클래스 이름이 사용 될 수도 있다. 만약 패키지가 없다면
같이 만든 클래스들이 서로 충돌할 것이다.
이 때 이 클래스들을 잘 모아주는 것이 패키지이다.

이 패키지는 단순한 디렉터리를 나누는 것을 의미하지 않는다. 패키지는 디렉터리를 나누고 패키지 선언라는 것도 별도로 해야한다.

패키지를 사용할 때 클래스 패스
그 상위 폴더가 클래스 패스에 포함되어야 한다.
예로 들면,
AAA폴더 안에 BBB, CCC가 있고 BBB안에 Circle.class, CCC안에 Circle.class 있다.
이 때
BBB.Circle c1 = new BBB.Circle();
CCC.Circle c2 = new CCC.Circle();
위와 같이 선언 하게 되면 BBB와 CCC가 패키지 이름이된다. 그래서 BBB와 CCC는 패키지 이름으로 선언이 되있어야한다.
클래스 패스는 AAA디렉터리가 클래스 패스에 포함되야 한다.

다른 예로 위와 같은 폴더에
AAA.BBB.Circle c1 = new AAA.BBB.Circle();
AAA.CCC.Circle c2 = new AAA.CCC.Circle();
위와 같이 쓴다면 AAA.BBB와 AAA.CCC가 패키지 이름이다.
이 때 클래스 패스는 AAA의 상위 폴더가 클래스 패스에 포함되어야한다. 동시에 AAA.BBB와 AAA.CCC가 패키지 이름으로 선언되야한다.
패키지 선언은 바로 위의 경우
package AAA.BBB;
이렇게 선언하면 된다.

import 선언
-> 패키지로 묶여있는 클래스의 인스턴스 생성을 간편하게 하기 위하여 사용한다.
예로,
import orange.area.Circle; 과 같이 쓴다면
그 아래부터는 orange.area를 생략하고 Circle만 사용해도 된다.

패키지안에 여러 클래스가 있는데 그 클래스들을 전부 import하고 싶을 때는
import orange.area.* 로 선언하면 그 안에 있는 클래스들이 전부 import된다.

하지만 import로 쓰면 Circle만 써도 된다고 했는데 다른 클래스에 Circle이 있을 경우 충돌할 수 있게된다. 그러므로 그런 경우는 주의해서 사용해야한다.
클래스 마다 import하는 것이 가장 좋은 방법이다.

문제 8-1 2번문제
이 문제를 하면서 배치 파일을 직접 만들어 보았다.


javac -d . *.java

java FruitSalesPackageMain


위는 배치파일 내용이다.

(prob.bat 파일)


이 파일을 실행하면

(결과)


위와 같이 경로의 파일을 일일이 만들고 컴파일 하지 않아도 되는
-d . *.java 코드를 넣어서 각각의 폴더가 만들어 진 것을 확인 할 수 있다.
또 그 파일 안에 필요한 class 파일들이 들어가 있다.


(실행 결과)


위는 문제의 코드를 실행한 결과이다.

(참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)




+ Recent posts