❗ 개인적으로 공부했던 내용을 복습하고 정리하기 위한 글입니다! 따라서 내용이 정확하지 않을 수 있습니다!
객체 배열을 하기 전, 배열에 대한 개념정리가 필요할 것 같아서 간단하게 요약정리를 해보았다! 우선 배열의 정의는 다음과 같다.
같은 타입(자료형)의 여러 변수를 하나로 묶는 참조 변수, 실제 값이 아닌 배열의 시작주소가 저장된다.
여기서 주목해야 할 점은 배열은 참조 변수라는 점인데, 우리가 크기가 5짜리인int
형 배열을 만들 때 다음과 같이 만든다.
int[] array = new int[5];
그럼 여기서 만든 array
가 참조변수가 되고, 이 변수를 출력해보면 주소값이 출력되는 걸 볼 수 있다.
System.out.println(array);
실제 값을 출력하려면, 아래와 같이 각각의 인덱스를 통해 출력해야 한다.
for (int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] = " + array[i]);
}
또한 초기화를 진행하지 않아도 0으로 자동으로 초기화가 되는 것을 알 수 있다.
배열 변수는 배열의 시작주소를 저장하기 때문에, 배열을 복사할 때
int[] array2 = array
와 같이 진행했다면, 그저 참조하는 주소값만 복사해오기 때문에 얕은 복사가 일어나, 원본 배열에서 수정을 하면 복사한 배열에서도 수정이 일어나는(그 반대도!) 얕은 복사가 일어난다. 이를 방지하기 위해서는 깊은 복사를 이용해야하는데, 관련 글은 여기에 정리해 두었다!
같은 클래스로 만들어진 객체들을 하나로 묶는 것
말 그대로이다. 배열이 같은 자료형을 하나로 묶었다면, 객체 배열은 같은 클래스로 만들어진 객체들을 하나로 묶는 것이다. 쉽게 생각하면 자료형대신 클래스를 자료형으로 보고 만들면 된다. 객체 배열의 생성은 다음과 같다. Member이라는 클래스가 있다고 가정하고, 이 클래스로 배열을 만들기 위해서는
Member[] m = new Member[3];
이렇게 하면 된다.
일반 배열과 마찬가지로 그냥 객체 배열을 출력하면, 주솟값만 출력되고, 객체 배열 안의 데이터들을 보고 싶으면 인덱스에 접근해야 데이터를 볼 수 있다.
Member[] m = new Member[3];
System.out.println(m);
for(int i=0; i<m.length; i++) {
System.out.println(m[1]);
}
또한 초기화를 진행하지 않아도, null로 자동으로 초기화 됨을 알 수 있다.
첫 스터디 자료를 만들면서 개념을 다시 짚고 넘어가서 더 잘 들어오는 것 같았다. 물론 나중에는 객체배열이 귀찮아서 Arraylist
와 같은 컬랙션으로만 썼는데, 책도 사고 스터디 준비하면서 메모리 주소를 어떻게 참고하고, 어떻게 사용하는지 다시 한 번 정리할 수 있어서 좋았다!
끝!😉