여러 종류의 객체를 하나의 배열로 다루기
객체를 하나의 배열로 다루기 (1)
//class 배열만들기
---------------------------------------
-> Product p[] = new Product[3]; //객체배열 생성
Product p1 = new Tv(); -> p[0] = new Tv();
Product p2 = new Computer(); -> p[1] = new Computer();
Product p3 = new Audio(); -> p[2] = new Audio();
//다른 방법
Product[] p = { new Tv(), new Computer(), new Audio };
//기본 배열 만들기
---------------------------------------
//방법 1
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
//방법 2 (선언과 동시에 배열의 크기 지정 및 값 초기화)
int[] array1 = new int[] {1,2,3};
//방법 3 (선언과 동시에 배열의 크기 지정 및 값 초기화)
int[] array2 = {1,2,3};
//방법 4 (선언 후 기본변수에 값 초기화)int는 기본변수 Product는 참조변수
int[] array3;
array3 = {1,2,3}; // 에러
array3 = new int[]{1,2,3};
---------------------------------------
1. 조상타입의 배열에 자손들의 객체를 담을 수 있다.
-> Product p[] = new Product[3]; //객체배열 생성
Product p1 = new Tv(); -> p[0] = new Tv();
Product p2 = new Computer(); -> p[1] = new Computer();
Product p3 = new Audio(); -> p[2] = new Audio();
여기서 배열에는 실제 객체를 저장하는게 아니라 참조변수(Product)를 저장하기 위한 것
배열의 각 요소에는 인스턴스의 주소값(Tv, Computer, Audio)이 저장된다.
위에 배열을 적용한 코드
package chapter7;
public class Example1_Buyer {
public static void main(String[] args) {
class Product {
String name = ""; //제품이름
int price; //제품가격
int bonusPoint; //보너스 점수
Product(String name, int price, int bonusPoint){ //생성자
this.name = name;
this.price = price;
this.bonusPoint = bonusPoint;
}
}
-----------------------------------------------------//class Tv
class Tv extends Product {
Tv() {
this("jmTV",500,50); //밑에 있는 생성자 호출
}
Tv(String name, int price, int bonusPoint) {
super(name, price, bonusPoint); // 조상 생성자 호출
}
}
-----------------------------------------------------//class Computer
class Computer extends Product {
Computer() {
this("jm컴퓨터",200,20); //밑에 있는 생성자 호출
}
Computer(String name, int price, int bonusPoint) {
super(name, price, bonusPoint); // 조상 생성자 호출
}
}
-----------------------------------------------------//class Buyer
class Buyer { //물건 사는 사람
int money = 1000; //소유금액
int bonusPoint = 0; //보너스점수
Product[] cart = new Product[10]; //장바구니, cart배열 생성
int i=0;
void buy(Product p) { <---- //자손타입의 인스턴스 넘겨 줄 수 있다!!!
money = money - p.price;
bonusPoint += p.bonusPoint;
cart[i++] = p; // 인스턴스가 넘겨지면 cart배열에 저장
}
}
=======================================================//결과 확인
Buyer b = new Buyer(); //Buyer 인스턴스 생성
System.out.println(b.money); // 소유금액 1000원
Tv tv = new Tv(); //Tv 인스턴스 생성
Computer com = new Computer(); //Com 인스턴스 생성
b.buy(tv); //buy메서드에 tv인스턴스를 넣어서 호출
System.out.println("소지금 : "+b.money); //소지금 : 500
System.out.println("보유 보너스 : "+b.bonusPoint); //보유 보너스 : 50
b.buy(com); //buy메서드에 com인스턴스를 넣어서 호출
System.out.println("소지금 : "+b.money); //소지금 : 300
System.out.println("보유 보너스 : "+b.bonusPoint); //보유 보너스 : 70
System.out.println(b.cart[0].name); // jmTV
System.out.println(b.cart[1].name); // jm컴퓨터
}
}
java.util.Vector (객체 저장 클래스)
모든 종류의 객체들을 저장할 수 있는 클래스
public class Vector extends AbstractList implements List, Cloneable, java.io.Serializable {
protected Object elementData[];
...
}
Vector 클래스는 위와 같이 내부적으로 Object 타입의 객체 배열을 가지고 있어서 어떠한 종류의 개체도 담을 수 있다.
(Object 클래스는 모든 클래스의 조상이고 조상의 타입으로 자손 인스턴스를 참조할 수 있기 때문에)
Vector클래스는 Object배열을 자동적으로 관리해주기 때문에 배열을 직접 관리해줄 필요 없이 객체를 Vector에 저장하고 읽어오는 메서드만 사용하면 된다.
Vector 클래스의 주요 메서드
- Vector()
Vector 클래스의 기본 생성자
기본적으로 10개의 객체를 저장할 수 있는 인스턴스 생성
10개 이상으로 저장 시 자동적으로 크기가 증가된다.
- boolean add(Object o)
Vector에 객체를 저장하는 메서드
매개변수가 Object 타입의 참조변수라서 어떤객체도 매개변수로 사용할 수 있다.
(어떤타입의 객체든지 저장할 수 있다.)
리턴값은 boolean이기 때문에 저장에 성공하면 true 등 리턴 함
- boolean remove(Object o)
Vector에 저장되어 있는 객체를 제거한다.
나머지는 add메서드와 같다.
- boolean isEmpty()
Vector가 비어있는지 검사.
비어있으면 True, 아니면 False
- Object get(int index)
인덱스를 통해서 지정된 위치의 객체를 반환한다.
3이면 4번째로 저장된 객체가 반환된다.
- int size()
Vector에 실제로 저장된 객체의 개수를 정수로 반환한다.
Vector클래스를 이용해서 바꾼 코드
Prodcut[] cart = new Product[10];
void buy(product p) {
cart[i++] = p;
}
-----------------------------------
Vertor cart = new Vector();
void buy(Product p) {
cart.add(p);
}
구입한 제품의 목록을 출력해주는 코드
Author And Source
이 문제에 관하여(여러 종류의 객체를 하나의 배열로 다루기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@snowgom/여러-종류의-객체를-하나의-배열로-다루기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)