본문 바로가기
JAVA

[JAVA] 객체와 클래스 - 객체를 배열로 관리하기

by Amy IT 2022. 5. 23.

학생을 모델링하여 만든 학생 클래스로 여러 학생 객체를 생성하고 정보를 저장할 수 있습니다. 그런데 이렇게 생성된 학생 객체를 다음과 같이 각각의 변수에 저장하면 관리하기도 어렵고 데이터를 조회하는 것도 번거로워집니다. 

Student stu1 = new Student("홍길동1", 10, "서울1");
Student stu2 = new Student("홍길동2", 10, "서울2");
...

그래서 필요한 것이 배열입니다. 객체를 배열로 관리하면 다량의 데이터를 효율적으로 관리할 수 있게 됩니다. 기본형 데이터를 배열로 관리하는 것에 비해 처음 이해가 어려울 수 있지만, 매우 중요한 개념이므로 잘 정리해 놓는 것이 좋습니다.

 

학생 클래스를 만들고 이를 이용해 학생 객체를 생성한 후 배열로 저장하는 프로그램을 만들어 보겠습니다.

public class Student {

	private String name;
	private int age;
	private String address;
	
	public Student() {}
	public Student(String name, int age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

}
public class TestStudent {

	public static void main(String[] args) {
		
		//1.new 이용
		Student [] arr1 = new Student[3]; //Student 클래스 타입 배열, 방 3개
		arr1[0] = new Student("홍길동1", 10, "서울1"); //Student 객체 생성 후 각 방에 주소 저장(참조)
		arr1[1] = new Student("홍길동2", 10, "서울2");
		arr1[2] = new Student("홍길동3", 10, "서울3");
	
		//2.리터럴 이용
		Student [] arr2 = { new Student("홍길동1", 10, "서울1"),
						new Student("홍길동2", 10, "서울2"),
						new Student("홍길동3", 10, "서울3") };
		
		//3.new+리터럴 이용
		Student [] arr3 = new Student[] { new Student("홍길동1", 10, "서울1"),
									new Student("홍길동2", 10, "서울2"),
									new Student("홍길동3", 10, "서울3") };
		
		//데이터 출력
		for (Student stu : arr3) {
			System.out.println("생성된 객체 주소: "+stu); //각 방의 데이터를 꺼내오므로 참조된 객체의 주소 출력
		}
		for (Student stu : arr3) {
			System.out.println("이름: "+stu.getName()); //각각 참조된 클래스 객체 내 get함수로 이름 꺼내옴
		}

	}

}

 

Student 클래스 타입의 배열을 생성하고, 각 방에 각각 Student 객체(의 주소)를 저장하고 있습니다. 기본형 데이터와 마찬가지로 배열 생성은 세 가지 방법으로 가능합니다. 데이터 타입이 클래스 객체이므로 각 방에 들어가는 데이터도 클래스 객체라는 점만 다를 뿐, 과정은 동일합니다. 또한, 기본형 데이터가 아닌 모든 참조형 데이터는 변수에 저장할 때 실제 데이터 값이 아닌 주소가 저장됩니다. 여기서 arr[0], arr[1], arr[2] 각 방에 저장되는 것은 Student라는 클래스 객체 타입이므로, 각 방은 참조변수처럼 각 Student 객체의 주소를 저장하게 됩니다. 그래서 for문을 이용해 arr3[0], arr3[1], arr3[2]의 값을 각각 꺼내오면, 각 방에 저장된 Student 객체의 주소들이 출력됩니다. 실제 데이터를 출력하기 위해 각 객체가 가지고 있는 get함수를 이용해 이름을 꺼내오고 있습니다. 이렇게 배열로 객체들을 관리하게 되면 데이터의 관리가 훨씬 수월해 집니다. 

 

이상으로 객체를 배열로 관리하는 방법을 정리해 보았습니다. 

 

 

댓글