250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- html form
- 김영한
- 프록시
- DI
- objecterror
- 오블완
- http 메시지 컨버터
- HttpServletResponse
- java
- 테스트코드
- 의존관계
- ocp
- equals()
- fielderror
- 오버라이딩
- 추상클래스
- 싱글톤
- 스프링컨테이너
- 인터페이스
- @configuration
- 다형성
- 스프링
- 서블릿
- 참조변수
- 백준
- 코딩테스트
- JSON
- 코드트리
- 티스토리챌린지
- 코드트리조별과제
Archives
- Today
- Total
minOS
자바의 정석 ch7-29,30 여러 종류의 객체를 배열로 다루기 본문
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
'TIL > 남궁성의 자바의 정석' 카테고리의 다른 글
자바의 정석 ch7-33 추상 클래스의 작성 1 (0) | 2023.12.30 |
---|---|
자바의 정석 ch7-31,32 추상 클래스,추상 메서드 (0) | 2023.12.29 |
자바의 정석 ch7-27,28 매개변수 다형성 (0) | 2023.12.25 |
자바의 정석 ch7-26 instanceof 연산자 (5) | 2023.12.21 |
자바의 정석 ch7-24,25 참조변수의 형변환 (0) | 2023.12.16 |