Small Grey Outline Pointer Java 클래스 배열
본문 바로가기
Dev./java

Java 클래스 배열

by sso. 2022. 6. 11.

클래스 배열

객체를 여러개 선언해야 하는 경우
배열 타입으로 한번에 선언 후 사용한다

클래스 배열 선언
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

댓글