오늘 친구랑 걸으면서
(그 친구는 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를 공부한 적이 없다구요, 윤성우)
'Programing > JAVA 일지' 카테고리의 다른 글
JAVA(6일차) - (2) 전화번호 관리 프로그램1 (0) | 2016.12.08 |
---|---|
JAVA(6일차) - (1) 접근제어, 클래스변수, 클래스 메소드, 메소드 오버로딩, String 클래스 (0) | 2016.12.07 |
JAVA(5일차) - (1) 클래스와 인스턴스 (0) | 2016.12.07 |
JAVA(4일차) - 메소드, Recursive 메소드 (0) | 2016.12.06 |
JAVA(3일차) - 실행흐름의 컨트롤(조건문,반복문) (0) | 2016.12.05 |