728x90
객체 배열 이해하기
- 객체 배열 선언 방법
- 배열 복사하기
객체 배열 선언 방법
객체 배열을 배우기 위하여 객체를 위한 클래스를 먼저 만들겠습니다.
public class Student{
private string name;
private int age;
public Student(){
}
public Student(String name, int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
위와 같은 클래스를 만들었을 때 학생이 여러 명일 경우 배열로 저장을 하도록 하겠습니다.
public class MakeArray{
public static void main(String[] args){
Student[] student = new Student[5];//student배열 생성
//기본생성자로 배열의 공간에 값을 넣는 방법
student[0] = new Student();
student[0].setName("홍길동");
student[0].setAge(12);
//객체의 변수에 값을 바로 넣어주는 생성자를 이용한 방법
student[1] = new Student("이방인",13);
}
}
객체 배열의 경우 배열을 생성하면 변수를 선언한 것이 아니라 변수 이름만 만들었다고 생각하시면 됩니다. 비유를 하자면 아래의 형태만 선언되었다고 비유를 들 수 있습니다.
Student student[0];
Student student[1];
Student student[2];
Student student[3];
Student student[4];
따라서 변수에 값을 넣기 위하여 set메서드를 사용을 하거나 생성자를 이용하여 값을 넣어주어야 합니다.
객체 배열 복사하기
배열을 복사하는 방법을 앞의 글에서 arraycopy를 이용하여 설명드렸습니다. 하지만 객체 배열의 경우 배열을 복사하는 방법은 조금 다릅니다.
Student[] student1 = new Student[3];
Student[] student2 = new Student[3];
student1[0] = new Student("홍길동",10);
student1[1] = new Student("이방인",20);
student1[2] = new Student("김삿갓",30);
System.arraycopy(student1,0,student2,0,3);
위의 예시와 같이 arraycopy를 사용하는 경우 student2 배열은 student1의 배열의 주소 값을 복사하여 가지고 옵니다. 따라서 각각의 배열 속 요소를 복사하는 것이 아니라 student1[0]과 student2[0]의 주소 값이 같도록 되는 것입니다. 따라서 student1 배열의 요소 값을 바꾸면 student2 배열의 요소 값도 바뀌게 됩니다.
student1[0] | 주소값 : Student@00000001 | "홍길동",10 |
student2[0] | ||
student1[1] | 주소값 : Student@00000002 | "이방인",20 |
student2[1] | ||
student1[2] | 주소값 : Student@00000003 | "김삿갓",30 |
student2[2] |
복사를 할 때 주소 값이 아닌 요소 값만 복사를 하여 각각의 배열 요소 값을 변경하여도 서로 영향을 주지 않기 위해서는 아래와 같은 방법을 사용하여야 합니다.
student2[0].setName(student1[0].getName);
student2[0].setAge(student2[0].getAge);
이러한 식으로 각각의 값을 입력을 하여야 주소 값이 다르기에 영향을 주지 않습니다. for문을 이용하면 쉽게 복사를 할 수 있습니다.
for(int i=0;i<student1.length;i++){
student2[i].setName(student1[i].getName);
student2[i].setAge(student2[i].getAge);
}
728x90