자바
[JAVA] 객체 배열 만들기
코딩하는둥이
2022. 11. 26. 15:22
객체 배열 만들기
- 참조 자료형을 선언하는 객체 배열
- 배열만 생성한 경우 요소는 nul로 초기화됨
- 각 요소를 new를 활용하여 생성하여 저장해야 함
public class BookArray{
public static void main(String[] args){
Book[] library = new Book[5];
for(int i=0; i<library.length; i++){ // 결과값이 null 5개 나옴
System.out.println(library[i]);
}
library[0] = new Book("책1", "글쓴이1");
library[1] = new Book("책2", "글쓴이2");
library[2] = new Book("책3", "글쓴이3");
library[3] = new Book("책4", "글쓴이4");
library[4] = new Book("책5", "글쓴이5");
for(int i=0; i<library.length; i++){ // Book 인스턴스 멤버들
library[i].showBookInfo();
}
for(int i=0; i<library.length; i++){ // Book 인스턴스를 저장한 메모리 공간 주소
System.out.println(library[i]);
}
}
}
배열 복사하기
- 기존 배열과 같은 배열을 만들거나 배열이 꽉 찬 경우 더 큰 배열을 만들고 기존 배열 자료를 복사할 수 있음
- System, arraycopy(src, srcPos, dest, destPos, length);
매개변수 | 설명 |
src | 복사할 배열 이름 |
srcPos | 복사할 배열의 첫 번째 위치 |
dest | 복사해서 붙여 엏을 대상 배열 이름 |
destPos | 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치 |
length | src에서 dest로 자료를 복사할 요소 개수 |
public class Main {
public static void main(String[] args) {
int[] array1 = {10, 20, 30, 40, 50};
int[] array2 = {1, 2, 3, 4, 5};
System.arraycopy(array1, 0, array2, 1, 4);
// (복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)
for(int i =0; i<array2.length; i++) {
System.out.println(array2[i]);
}
}
}
// 결과 값 1 10 20 30 40
객체 배열 복사하기
- 얕은 복사: 배열 쇼소의 주소만 복사되므로 배열 요소가 변경되면 복사된 배열의 값도 변경됨
public class Main {
public static void main(String[] args) {
Book[ ] bookArray1 = new Book[3];
Book[ ] bookArray2 = new Book[3];
bookArray1[0] = new Book("책1", "글쓴이1");
bookArray1[1] = new Book("책2", "글쓴이2");
bookArray1[2] = new Book("책3", "글쓴이3");
System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
for(int i=0; i<bookArray2.length; i++) {
bookArray2[i].showBookInfo();
}
}
}
객체 배열의 깊은 복사
// 디폴트 생성자로 bookArray2 배열 인스턴스 생성
bookArray2[0] = new Book();
bookArray2[1] = new Book();
bookArray2[2] = new Book();
// bookArray1 배열 요소를 새로 생성한 bookArray2 배열 인스턴스에 복사
for(int i=0; i<bookArray1.length; i++) {
bookArray2[i].setBookName(bookArray1[i].getBookName());
bookArray2[i].setAuthor(bookArray1[i].getAuthor());
}
// bookArray1 첫 번째 배열 요소 값 수정
bookArray1[0].setBookName("책4");
bookArray1[0].setAuthor("글쓴이4");
System.out.println("bookArray1");
for(int i=0; i<bookArray1.length; i++) {
bookArray1[i].showBookInfo(); //bookArray1 배열 요소 값 출력
}
// bookArray1 배열 요소 값과 다른 내용이 출력함
System.out.println("bookArray2");
for(int i=0; i<bookArray2.length; i++) {
bookArray1[i].showBookInfo(); // bookArray2 배열 요소 값 출력
}
}
향상된 for문(enchanced for loop)
- 배열 요소의 처음부터 끝까지 모든 요소를 참조할 때 편리한 반복문
public class Main
{
public static void main(String[] args) {
String[] strArray = {"자바", "자바스크립트", "파이썬", "C"};
for(String lang : strArray){
System.out.println(lang);
}
}
}