TIL/남궁성의 자바의 정석
자바의 정석 ch7-29,30 여러 종류의 객체를 배열로 다루기
minOE
2023. 12. 28. 04:36
728x90
ch7-29 여러 종류의 객체를 배열로 다루기
다형성의 장점
1) 다형적 매개변수 사용 가능
2)하나의 배열에 여러 종류 객체 저장
하나의 배열에 여러 종류 객체 저장
- 조상 타입의 배열에 자손들의 객체를 담을 수 있다.
1) 배열을 사용하지 않았을 때
class Product{ int price; //제품가격 int bonusPoint; //보너스 점수 Product(int price){ this.price = price; bonusPoint = (int) (price/10.0); } } class Tv extends Product { Tv() { super(100); } } class Computer extends Product{ Computer() { super(200); } } class Audio extends Product{ Audio(){ super(50); } } public class Main { public static void main(String[] args) { Product p1 = new Tv(); Product p2 = new Computer(); Product p3 = new Audio(); } }그림
2) 배열을 사용했을 때
그림class Product{ int price; //제품가격 int bonusPoint; //보너스 점수 Product(int price){ this.price = price; bonusPoint = (int)(price/10.0); } } class Tv extends Product { Tv() { super(100); } public String toString() { return "Tv"; } } class Computer extends Product { Computer() { super(200); } public String toString() { return "Computer";} } class Audio extends Product { Audio(){ super(50); } public String toString() { return "Audio";} } public class Main { public static void main(String[] args) { Product [] p = new Product[3]; p[0] = new Tv(); p[1] = new Computer(); p[2] = new Audio(); System.out.printf("%s, %s, %s",p[0],p[1],p[2]); } }출력
ch7-30 여러 종류의 객체를 배열로 다루기 실습
package ch7_30; class Product{ int price; //제품가격 int bonusPoint; //보너스 점수 Product(int price){ this.price = price; bonusPoint = (int)(price/10.0); } } class Tv extends Product { Tv() { super(100); } public String toString() { return "Tv"; } } class Computer extends Product { Computer() { super(200); } public String toString() { return "Computer";} } class Audio extends Product { Audio(){ super(50); } public String toString() { return "Audio";} } class Buyer { int money = 1000; int bonusPoint = 0; Product[] cart = new Product[10]; // 구입한 제품을 저장하기 위한 배열 int i =0; // cart 배열의 인덱스 void buy(Product p) { if (money < p.price) { System.out.println("잔액 부족"); return; } money -= p.price; bonusPoint += p.bonusPoint; cart[i++] = p; // 제품을 Product [] cart 에 저장 , 선언된 cart 배열의 객체의 숫자보다 cart 배열 길이가 작을 경우 ArrayIndexOutOfBoundsException 발생 System.out.println(p + "을/를 구입하였습니다"); } void summary() { int sum = 0; String itemList = ""; for (int i = 0; i < cart.length; i++) { if (cart[i] == null) break; sum += cart[i].price; // 구입한 물건 합계 if (cart[i+1] == null) // 구입한 물건 종류 , 편의를 위해 이렇게 코드 짠 거지 배열 길이가 할당된 객체 수와 같으면 ArrayIndexOutOfBoundsException 발생 itemList += cart[i]; else itemList += cart[i] + ","; } System.out.println("총 소비 금액은" + sum + "입니다"); System.out.println("구매한 물품은" + itemList + "입니다"); } } public class Main{ public static void main(String[] args) { Buyer b = new Buyer(); b.buy(new Computer()); b.buy(new Tv()); b.buy(new Audio()); b.summary(); } }
출력
ArrayIndexOutOfBoundsException 발생 방지 코드package ch7_30; class Product{ int price; //제품가격 int bonusPoint; //보너스 점수 Product(int price){ this.price = price; bonusPoint = (int)(price/10.0); } } class Tv extends Product { Tv() { super(100); } public String toString() { return "Tv"; } } class Computer extends Product { Computer() { super(200); } public String toString() { return "Computer";} } class Audio extends Product { Audio(){ super(50); } public String toString() { return "Audio";} } class Buyer { int money = 1000; int bonusPoint = 0; Product[] cart = new Product[2]; // 구입한 제품을 저장하기 위한 배열 int index =0; // cart 배열의 인덱스 int buy(Product p) { if (money < p.price) { System.out.println("잔액 부족"); return 0; } money -= p.price; bonusPoint += p.bonusPoint; if(cart.length <= index) //ArrayIndexOutOfBoundsExceptions나는 경우 해결 return 0; cart[index++] = p; // 제품을 Product [] cart 에 저장 System.out.println(p + "을/를 구입하였습니다"); return index; } void summary() { int sum = 0; String itemList = ""; for (int i = 0; i < cart.length; i++) { if (cart[i] == null) break; sum += cart[i].price; // 구입한 물건 합계 if (i == index-1) // 구입한 물건 종류 ,ArrayIndexOutOfBoundsExceptions나는 경우 해결 itemList += cart[i]; else itemList += cart[i] + ","; } System.out.println("총 소비 금액은" + sum + "입니다"); System.out.println("구매한 물품은" + itemList + "입니다"); } } public class Main{ public static void main(String[] args) { Buyer b = new Buyer(); b.buy(new Computer()); b.buy(new Tv()); b.buy(new Audio()); b.summary(); } }
출력
728x90




