1. public 클래스의 문법적인 특징
(1) public 클래스명과 자바 파일명의 이름은 대소문자 하나까지 똑같아야 한다.
public class Test{}
> 자바파일명을 'Test.java'으로 할 경우 문법적으로 이상없다.
public class Hello{}
> 자바파일명을 'hello.java'으로 할 경우 H에 대한 대소문자가 맞지 않아 문법적으로 에러발생.
(2) 자바파일에서 public 클래스는 오직 하나만 존재해야 한다.
파일명 : Test.java
public class Test{}
public class Hello{}
> 에러 Test.java 두 개의 public 클래스가 존재해서 에러
파일명 : Test.java
public class Test{}
class Hello{}
> public 클래스는 오직 Test만 존재하므로 에러 없음
파일명 : Test.java
class Test{}
class Hello{}
> 에러 없음
(3) 도스창에서 클래스 패스 설정하는 법
set classpath=.;.\sub;
(4) package를 같이 만들면서 컴파일 하는 옵션 (package가 있으면 현재폴더에 패키지를 만들면서 컴파일)
javac -d . 파일명.java
2. class path 클래스 패스 & 패키지
(1) class path
- class를 찾기 위한 경로. JVM이 프로그램을 실행할 때, 클래스파일을 찾는데 기준이 되는 파일 경로. 지정한 경로 이외에 추가적으로 확인이 필요한 폴더의 경로를 알려준다.
set classpath=.;.\폴더명;
- 만약 추가적으로 잡아주고 싶은 클래스패스 폴더명이 sub이라면 set classpath=.;.\sub; 이라고 입려해준다. 폴더명이 sub이 아닌 folder라면 set classpath=.;.\folder; 라고 입력해주면 된다.
(2) 배치파일 생성 - 배치 프로그램 실행을 위한 파일
javac -d. *.java
java 파일명
pause
- -d는 패키지까지 함께 생성되도록 한다.
- pause는 실행 후 바로 창이 닫히지 않도록 잠시 멈추도록 한다.
저장은 파일명.bat
- 확장자를 .bat으로 해준다.
(3) 패키지 선언
- 한 번밖에 들어가지 못하고 문법적으로 가장 위에 위치해야 한다.
3. class path 클래스 패스 & 패키지 예문
(1) 문제
- FruitSalesMain3.java의 FruitSeller 클래스를 다음의 패키지에 묶어서 컴파일 하자. orange.seller
- FruitBuyer 클래스를 다음의 패키지에 묶어서 컴파일 하자. orange.buyer
- 그리고 컴파일하고 실행해보자. 위에 내용을 배치 프로그램으로 해서 실행해 보자.
(2) FruitSalesMain3.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
class FruitSeller
{
int numOfApple;
int myMoney;
final int APPLE_PRICE;
public FruitSeller(int money, int appleNum, int price)
{
myMoney=money;
numOfApple=appleNum;
APPLE_PRICE=price;
}
public int saleApple(int money)
{
int num=money/APPLE_PRICE;
numOfApple-=num;
myMoney+=money;
return num;
}
public void showSaleResult()
{
System.out.println("남은 사과: " + numOfApple);
System.out.println("판매 수익: " + myMoney);
}
}
class FruitBuyer
{
int myMoney;
int numOfApple;
public FruitBuyer(int money)
{
myMoney=money;
numOfApple=0;
}
public void buyApple(FruitSeller seller, int money)
{
numOfApple+=seller.saleApple(money);
myMoney-=money;
}
public void showBuyResult()
{
System.out.println("현재 잔액: " + myMoney);
System.out.println("사과 개수: " + numOfApple);
}
}
class FruitSalesMain3
{
public static void main(String[] args)
{
FruitSeller seller1 = new FruitSeller(0, 30, 1500);
FruitSeller seller2 = new FruitSeller(0, 20, 1000);
FruitBuyer buyer = new FruitBuyer(10000);
buyer.buyApple(seller1, 4500);
buyer.buyApple(seller2, 2000);
System.out.println("과일 판매자1의 현재 상황");
seller1.showSaleResult();
System.out.println("과일 판매자2의 현재 상황");
seller2.showSaleResult();
System.out.println("과일 구매자의 현재 상황");
buyer.showBuyResult();
}
}
|
cs |
(3) 배치 프로그램을 통해 실행하기
① FruitSeller 클래스를 다음의 패키지에 묶어서 컴파일 하자. orange.seller
- FruitSalesMain3에서 class FruitSeller 부분 잘라내어 따로 저장
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
|
package orange.seller;
public class FruitSeller
{
int numOfApple;
int myMoney;
final int APPLE_PRICE;
public FruitSeller(int money, int appleNum, int price)
{
myMoney=money;
numOfApple=appleNum;
APPLE_PRICE=price;
}
public int saleApple(int money)
{
int num=money/APPLE_PRICE;
numOfApple-=num;
myMoney+=money;
return num;
}
public void showSaleResult()
{
System.out.println("남은 사과: " + numOfApple);
System.out.println("판매 수익: " + myMoney);
}
}
|
cs |
② FruitBuyer 클래스를 다음의 패키지에 묶어서 컴파일 하자. orange.buyer
- FruitSalesMain3에서 class FruitBuyer 부분 잘라내어 따로 저장
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
|
package orange.buyer;
import orange.seller.FruitSeller;
public class FruitBuyer
{
int myMoney;
int numOfApple;
public FruitBuyer(int money)
{
myMoney=money;
numOfApple=0;
}
public void buyApple(FruitSeller seller, int money)
{
numOfApple+=seller.saleApple(money);
myMoney-=money;
}
public void showBuyResult()
{
System.out.println("현재 잔액: " + myMoney);
System.out.println("사과 개수: " + numOfApple);
}
}
|
cs |
③ 그리고 컴파일하고 실행해보자. 위에 내용을 배치 프로그램으로 해서 실행해 보자.
- 잘라낸 내용들 없이 FruitSalesMain3의 내용만 저장
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import orange.seller.FruitSeller;
import orange.buyer.FruitBuyer;
class FruitSalesMain3
{
public static void main(String[] args)
{
FruitSeller seller1 = new FruitSeller(0, 30, 1500);
FruitSeller seller2 = new FruitSeller(0, 20, 1000);
FruitBuyer buyer = new FruitBuyer(10000);
buyer.buyApple(seller1, 4500);
buyer.buyApple(seller2, 2000);
System.out.println("과일 판매자1의 현재 상황");
seller1.showSaleResult();
System.out.println("과일 판매자2의 현재 상황");
seller2.showSaleResult();
System.out.println("과일 구매자의 현재 상황");
buyer.showBuyResult();
}
}
|
cs |
④ 배치 프로그램 실행을 위한 배치파일 생성하기
javac -d . *.java
java FruitSalesMain3
pause
- 텍스트 파일로 기재하여 파일 확장자를 bat로 주어 저장 후 실행
⑤ 실행 결과 확인
- 배치 프로그램 실행 결과
- orange package에 해당하는 class FruitBuyer, class FruitSeller 의 폴더와 class 파일 생성되었음
- FruitSalesMain3의 class 파일 생성되었음
'Java > Day7' 카테고리의 다른 글
[Java] class method 클래스 메소드 (0) | 2021.11.08 |
---|---|
[Java] access method ( getter & setter 게터앤세터) (0) | 2021.11.08 |
[Java] 기본값 & 접근 제어 지시자와 접근 허용범위 (0) | 2021.11.08 |