클래스 Again

  1. 클래스 + 클래스 (상호작용, 이용, 포함, 상속)
  2. 클래스 + 배열
  3. 메소드(생성자) + 클래스
  4. 메소드 + 배열
  5. ArrayList -> 더 편한 배열

<메인 클래스>

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);
}
profile
뒤죽박죽 벨로그

0개의 댓글

관련 채용 정보