객체 배열
많은 수의 객체를 다뤄야 할 때, 배열로 다루면 편리할 것
객체 역시 배열로 다루는 것이 가능하며, 이를 '객체 배열' 이라고 한다.
그렇다고 객체 배열 안에 객체가 저장되는 것은 아니고, 객체의 주소가 저장된다.
사실 객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열인 것.
참고 자료)
https://smoothiecoding.kr/%EC%9E%90%EB%B0%94-%EA%B0%9D%EC%B2%B4-%EB%B0%B0%EC%97%B4/
package Class;
import java.util.Scanner;
class Drink {
// 멤버변수
String name; // 음료 이름
int price; //음료 가격
// 멤버메소드
public Drink() {} // 기본 생성자
public Drink(String n, int p) { // 인자 생성자
name=n;
price=p;
}
}
public class Ex09_Drink {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("자판기 음료 갯수를 입력하세요 : ");
// 객체 배열 생성
Drink[] drinks=new Drink[sc.nextInt()]; // 참조변수 배열(객체 배열)을 생성
System.out.println("객체(drinks)의 주소 : " + drinks); // 객체의 주소가 저장됨을 볼 수 있음
System.out.println();
for(int i=0; i<drinks.length; i++) {
System.out.println("음료 이름과 가격을 입력하세요");
System.out.println("====================");
drinks[i]=new Drink(sc.next(), sc.nextInt());
}
// 생성한 객체의 주소를 출력
for(int i=0; i<drinks.length; i++) {
System.out.println((i+1) + "번째로 생성한 객체의 주소" + drinks[i]);
}
System.out.println("돈을 입력해주세요");
int coin=sc.nextInt();
/*
* 입력을 받은 coin과 객체 배열에 저장된 Drink 클래스의 멤버변수인
* price 가격을 비교해서 coin보다 금액이 작거나 같은 음료를 선택
*/
for(int i=0; i<drinks.length; i++) {
if(coin >= drinks[i].price) {
System.out.print(drinks[i].name + "\t");
}
}
sc.close();
}
}
결과
자판기 음료 갯수를 입력하세요 :
2
객체(drinks)의 주소 : [LClass.Drink;@7d4991ad
음료 이름과 가격을 입력하세요
====================
마운틴듀
1000
음료 이름과 가격을 입력하세요
====================
환타
800
1번째로 생성한 객체의 주소Class.Drink@28d93b30
2번째로 생성한 객체의 주소Class.Drink@1b6d3586
돈을 입력해주세요
900
환타
초기, 자판기 음료 갯수를 지정할 때 2를 입력했으니
길이가 2인 객체 배열 drink를 생성하면, 각 요소는 참조변수의 기본 값인 null로 자동 초기화 된다.
그리고 이 객체 배열은 2개의 객체, 정확히는 객체의 주소를 지정할 수 있다.
객체 배열만 생성한 후
Scanner sc=new Scanner(System.in);
System.out.println("자판기 음료 갯수를 입력하세요 : ");
// 객체 배열 생성
Drink[] drinks=new Drink[sc.nextInt()]; // 참조변수 배열(객체 배열)을 생성
System.out.println("객체(drinks)의 주소 : " + drinks); // 객체의 주소가 저장됨을 볼 수 있음
자판기 음료 갯수를 입력하세요 :
2
객체(drinks)의 주소 : [LClass.Drink;@7d4991ad
위의 그림에서도 알 수 있듯이, 객체 배열을 생성하는 것은
그저 객체를 다루기 위한 참조 변수들이 만들어진 것일 뿐, 아직 객체가 저장되지 않았다.
객체를 생성해서 객체 배열의 각 요소에 저장하는 것을 잊으면 안된다.
객체를 생성해서 배열의 각 요소에 저장한 후
for(int i=0; i<drinks.length; i++) {
System.out.println("음료 이름과 가격을 입력하세요");
System.out.println("====================");
drinks[i]=new Drink(sc.next(), sc.nextInt());
}
// 생성한 객체의 주소를 출력
for(int i=0; i<drinks.length; i++) {
System.out.println((i+1) + "번째로 생성한 객체의 주소" + drinks[i]);
음료 이름과 가격을 입력하세요
====================
마운틴듀
1000
음료 이름과 가격을 입력하세요
====================
환타
800
1번째로 생성한 객체의 주소Class.Drink@28d93b30
2번째로 생성한 객체의 주소Class.Drink@1b6d3586
'Back-End > Java' 카테고리의 다른 글
[Java] 캡슐화(Encapsulation)_getter와 setter (0) | 2021.08.26 |
---|---|
(스크랩) [Java] Public class 와 class의 차이 (0) | 2021.08.25 |
[Java] 생성자(Constructor) (0) | 2021.08.23 |
[Java] 메소드 호출 시 반환형 (0) | 2021.08.19 |
[Java] String 클래스의 특징 및 주요 메서드(StringBuffer, StringTokenizer) (0) | 2021.08.19 |
댓글