클래스 배열
객체를 여러개 선언해야 하는 경우
배열 타입으로 한번에 선언 후 사용한다
클래스 배열 선언
1. 클래스명[] 배열명 = new 클래스명[길이]; //자동 초기화
2. 클래스명[] 배열명 = {
new 클래스명(),
new 클래스명(),
...
}
클래스 배열 사용
배열명[index].변수명
배열명[index].메서드명
package day17;
import java.util.Scanner;
class Animal{
String name;
int age;
String feed;
public Animal() {
}
public Animal(String name, int age, String feed) {
this.name = name;
this.age = age;
this.feed = feed;
}
@Override //재정의
public String toString() {
return "이름: " + name + "\n나이: " + age + "살\n먹이: " + feed;
}
}
public class ArrInstance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Animal[] arAni=new Animal[3];
//Animal 타입의 3칸 짜리 배열이 힙영역에 생성됨. 그 시작을 arAni라는 배열명이 갖고 있다
for (int i = 0; i < arAni.length; i++) {
//매 반복마다 i번에 있는 것을 객체화 시켜줘야 한다
//항상 new스캐너 생성자를 호출해야 힙메모리에 할당 되는데 new생성자를 호출 안하면 이름만 떠있는 null값이다
arAni[i] = new Animal(); //Animal공간이 힙메모리에 할당 됨
System.out.println(i+1+"번 동물의 이름: ");
arAni[i].name=sc.next(); //입력 받은 이름을 배열.name에 바로 저장
System.out.println(arAni[i].name + "나이: ");
arAni[i].age = sc.nextInt();
System.out.println(arAni[i].name + "먹이: ");
arAni[i].feed=sc.next();
}
for (int i = 0; i < arAni.length; i++) {
System.out.println(arAni[i]);
}
}
}
for (int i = 0; i < arAni.length; i++) {
arAni[i] = new Animal();
System.out.println(i+1+"번 동물의 이름: ");
arAni[i].name=sc.next();
System.out.println(arAni[i].name + "나이: ");
arAni[i].age = sc.nextInt();
System.out.println(arAni[i].name + "먹이: ");
arAni[i].feed=sc.next();
}
생성자를 통해 초기화 시키기
//생성자를 통해 초기화 시키기
for (int i = 0; i < arAni.length; i++) {
System.out.println(i+1+"번 동물의 이름: ");
name = sc.next();
System.out.println("나이: ");
age=sc.nextInt();
System.out.println("먹이: ");
feed=sc.next();
arAni[i]= new Animal(name, age, feed);
}
실행 결과
객체를 3번 만드는 것 보다, 객체 배열을 만들어 사용하는 것이 편리하다
최종코드
package day17;
import java.util.Scanner;
class Animal{
String name;
int age;
String feed;
public Animal() {
}
public Animal(String name, int age, String feed) {
this.name = name;
this.age = age;
this.feed = feed;
}
@Override //재정의
public String toString() {
return "이름: " + name + "\n나이: " + age + "살\n먹이: " + feed;
}
}
public class ArrInstance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Animal[] arAni=new Animal[3];
//Animal 타입의 3칸 짜리 배열이 힙영역에 생성됨. 그 시작을 arAni라는 배열명이 갖고 있다
String name = "";
int age=0;
String feed;
//생성자를 통해 초기화 시키기
for (int i = 0; i < arAni.length; i++) {
System.out.println(i+1+"번 동물의 이름: ");
name = sc.next();
System.out.println("나이: ");
age=sc.nextInt();
System.out.println("먹이: ");
feed=sc.next();
arAni[i]= new Animal(name, age, feed);
}
//for (int i = 0; i < arAni.length; i++) {
//매 반복마다 i번에 있는 것을 객체화 시켜줘야 한다
//항상 new스캐너 생성자를 호출해야 힙메모리에 할당 되는데 new생성자를 호출 안하면 이름만 떠있는 null값이다
//arAni[i] = new Animal(); //Animal공간이 힙메모리에 할당 됨
//System.out.println(i+1+"번 동물의 이름: ");
//arAni[i].name=sc.next(); //입력 받은 이름을 배열.name에 바로 저장
//System.out.println(arAni[i].name + "나이: ");
//arAni[i].age = sc.nextInt();
//System.out.println(arAni[i].name + "먹이: ");
//arAni[i].feed=sc.next();
//}
for (int i = 0; i < arAni.length; i++) {
System.out.println(arAni[i]);
}
}
}
728x90
'Dev. > java' 카테고리의 다른 글
Java :: 다형성/ 싱글턴 패턴 (0) | 2022.06.12 |
---|---|
Java Casting/instance of (0) | 2022.06.11 |
Java 상속 (0) | 2022.06.11 |
상속 / 다형성 (0) | 2022.06.07 |
지역변수/전역변수/static변수 (0) | 2022.06.06 |
댓글