<메인 클래스>
class ClassUnion
Mart m;
m = new Mart("우리마트", 1); //객체 생성
Counter[] cts = new Counter[3];
//1번 배열 통째로 저장
cts[0] = new Counter(1, 2000);
cts[1] = new Counter(2, 1200);
cts[2] = new Counter(3, 800);
m.setCts(cts); //먼저 카운터 객체 만들고!
//Mart클래스에 cts라는 변수는 Counter클래스를 가리키고 있다!
m.printInfo(); //마트정보 출력 -> 다른클래스:카운터
System.out.println("------------------------------------");
//2번 배열 내에 카운터 1개씩 저장
m.setCtsArrayCount(3); //this.cts = new Counter[n]; 선언만 된상태니까 배열 하나하나 또 객체 생성해줘야됨!
Counter ct1 = new Counter(4, 1500);
//Counter ct2 = new Counter(5, 1600);
m.setCtsObject(0, ct1); //이렇게 세팅하려면 객체 생성필요하지!
m.setCtsObject(1, new Counter(5, 1600) ); //Counter ct 자리에 바로 객체 생성 가능!
//3번 배열 내에 객체 생성
m.setCtsObject(2, 6, 1900); //오버로딩! this.cts[index] = new Counter(number, size);
m.printInfo();
=> m이라는 객체를 생성 시켜주고 name,floorsCount를 우리마트, 1로 지정 해준다
//1번 배열 통째로 저장
=> 그리고 배열메소드를 보면
먼저 int[] arr = new int[3]; 처럼 Counter[] cts = new Counter[3]; 로 배열 선언을 해준다!
=> new Counter[3];은 생성해준 상태가 아니라 그냥 선언만 한 상태이기 때문에 각각 배열마다 값을 줘야하므로 각각 생성해야한다!
cts[0] = new Counter(1, 2000);
cts[1] = new Counter(2, 1200);
cts[2] = new Counter(3, 800);
Counter(int number, int size) 이렇게 두개의 매개변수가 있는 생성자가 있으므로 각각 저렇게 생성 시켜주었다!
=> 카운터 배열 객체를 각각 생성시켜주고나서 m.setCts(cts); 로 저장하고
=> m.printInfo(); 으로 출력시켜주는데 m.printInfo() 메소드에는 카운터클래스 cts를 불러와야하는 코드를 짜줘야한다! 그래서 그게
for (int i=0; i<cts.length; i++) {
cts[i].printInfo();
}
cts[i].printInfo();은 Counter클래스에 printInfo()메소드가 있기 때문에 불러온것! 저 코드를 실행시키면 cts[0]~cts[끝] 까지 실행되게 된다
=> Counter클래스 printInfo()는 System.out.println(number + "번 계산대" + " 사이즈:" + size); 이게 출력되니까
=> m.printInfo();의 출력결과는
마트이름:우리마트
1 층 건물
총3개 카운터 보유
1번 계산대 사이즈:2000
2번 계산대 사이즈:1200
3번 계산대 사이즈:800
//2번 배열 내에 카운터 1개씩 저장
=> m.setCtsArrayCount(3); 메소드를 찾아가보면
public void setCtsArrayCount(int n) {
this.cts = new Counter[n]; //내부에서 배열 생성!
}
cts = new Counter[3]; 이렇게 선언만 된 상태가 된다
=> 따라서 배열마다 하나씩 생성을 해주고 m.setCtsObject() 메소드를 이용한다!
Counter ct1 = new Counter(4, 1500);
Counter ct2 = new Counter(5, 1600);
m.setCtsObject(0, ct1);
m.setCtsObject(1, ct2);
이렇게 만드는 방법도 있고
m.setCtsObject(0, new Counter(4, 1500) );
m.setCtsObject(1, new Counter(5, 1600) );
한번에 이렇게 만드는 방법도 있고..
m.setCtsObject(int index, Counter ct); this.cts[index] = ct; 이니까
m.printInfo(); 출력될때☆
m.setCtsObject(0, ct1);은 index : 0, ct : Counter(4, 1500)=> Mart클래스의 printInfo에 cts[i].printInfo(); 로 가서 다시 Counter클래스의 printInfo();로 가게된다!
따라서 출력결과는
마트이름:우리마트
1 층 건물
총3개 카운터 보유
4번 계산대 사이즈:1500
5번 계산대 사이즈:1600
//실제론 3개 배열인데 1개가 없어서 오류라고 뜰것이다!
//3번 배열 내에 객체 생성
=> m.setCtsObject(2, 6, 1900); 메소드를 따라가보면
오버로딩한 형태로
public void setCtsObject(int index, int number, int size) {
this.cts[index] = new Counter(number, size);
}
따라서 cts[2] = new Counter(6,1900); 형태가 될거야
=> m.printInfo(); 메소드를 따라가면
=> 출력결과는
마트이름:우리마트
1 층 건물
총3개 카운터 보유
4번 계산대 사이즈:1500
5번 계산대 사이즈:1600
6번 계산대 사이즈:1900
<라이브러리 클래스>
class Mart
String name; //마트이름 참조
int floorsCount; //총 몇층짜리 기본
Counter[] cts; //Counter여러개 참조
public Mart(String name, int floorsCount) {
this.name = name;
this.floorsCount = floorsCount;
this.fz = null;
this.cts = null;
}
public void setCts(Counter[] cts) { //저장하고
this.cts = cts;
}
public Counter[] getCts() { //불러와
return this.cts;
}
//2번 배열내에 객체 1개씩 저장
public void setCtsArrayCount(int n) {
this.cts = new Counter[n]; //내부에서 배열 생성!
}
public void setCtsObject(int index, Counter ct) { //객체를 저장하는 -> 하나씩!
this.cts[index] = ct;
}
//3번 배열내에 객체를 생성 (오버로딩)
public void setCtsObject(int index, int number, int size) { //Counter 객체 만드는데 필요한 생성자 데이터를 여기서 받는것
this.cts[index] = new Counter(number, size);
}
public void printInfo() {
System.out.println("마트이름:" + name);
System.out.println(floorsCount + " 층 건물");
//cts[0].printInfo(); //Counter안의 number,size 정보를 보여주고싶은것!
//Counter클래스자체에 정보출력메소드가 있으니까 그걸 불러오는것!
//카운터 안의 number,size정보를 보여주는거니까!
System.out.println("총" + cts.length + "개 카운터 보유");
for (int i=0; i<cts.length; i++) {
cts[i].printInfo();
}
<라이브러리 클래스>
class Counter
//필드
int number; //몇번 계산대 번호
int size; //계산대 사이즈
//생성자
public Counter(int number, int size) {
this.number = number;
this.size = size;
}
//메소드
public void printInfo() {
System.out.println(number + "번 계산대" + " 사이즈:" + size);
}