4바이트, 8바이트) 메모리만 할당되고(null) 각 요소 객체는 생성하여 저장해야 합니다.
Book.java
package ch21; public class Book { private String title; private String author; public Book() { } public Book(String title, String author) { this.title = title; this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public void showBookInfo() { System.out.println(title + "," + author); } }BookTest.java
package ch21; public class BookTest { public static void main(String[] args) { Book[] library = new Book[5]; for(int i =0; i<library.length; i++) { System.out.println(library[i]); } } }출력 결과
객체를 생성하여 각 배열의 요소로 저장하기
BookTest.javapackage ch21; public class BookTest { public static void main(String[] args) { Book[] library = new Book[5]; library[0] = new Book("태백산맥1", "조정래"); library[1] = new Book("태백산맥2", "조정래"); library[2] = new Book("태백산맥3", "조정래"); library[3] = new Book("태백산맥4", "조정래"); library[4] = new Book("태백산맥5", "조정래"); for(Book book : library) { System.out.println(book); book.showBookInfo(); } } }출력 결과
자바에서 제공되는 배열 복사 메서드 =>
System.arrayCopy(src, srcPos, dest, destPos, length)
src- 원본 배열
srcPos- 원본 배열의 복사 시작 위치
dest- 복사할 배열
destPost- 복사할 배열의 복사 시작 위치
length- 복사할 요소의 개수
얕은 복사
- 객체 주소만 복사되어 한쪽 배열의 요소를 수정하면 같이 수정 된다.
- 즉, 두 배열이 같은 객체를 가리킨다.
package ch21; public class ObjdectCopyTest { public static void main(String[] args) { Book[] library = new Book[5]; Book[] copyLibrary = new Book[5]; library[0] = new Book("태백산맥1", "조정래"); library[1] = new Book("태백산맥2", "조정래"); library[2] = new Book("태백산맥3", "조정래"); library[3] = new Book("태백산맥4", "조정래"); library[4] = new Book("태백산맥5", "조정래"); copyLibrary[0] = new Book(); copyLibrary[1] = new Book(); copyLibrary[2] = new Book(); copyLibrary[3] = new Book(); copyLibrary[4] = new Book(); System.arraycopy(library, 0, copyLibrary, 0, 5); System.out.println("======copy library========="); for( Book book : copyLibrary ) { book.showBookInfo(); } library[0].setAuthor("박완서"); library[0].setTitle("나목"); System.out.println(); System.out.println("======library========="); for(Book book : library) { System.out.println(book); book.showBookInfo(); } System.out.println(); System.out.println("======copy library========="); for(Book book : copyLibrary) { System.out.println(book); book.showBookInfo(); } } }출력 결과
- 이처럼 얕은 복사는 객체 주소만 복사되어 두개의 배열이 같은 주소 값을 가르키고 있기때문에 한쪽 배열을 수정하면 나머지 다른 배열도 같이 수정된다.
깊은 복사
- 각각의 객체를 생성하여 그 객체의 값을 복사하여 배열이 서로 다른 객체를 가리키도록 합니다.
package ch21; public class ObjdectCopyTest { public static void main(String[] args) { Book[] library = new Book[5]; Book[] copyLibrary = new Book[5]; library[0] = new Book("태백산맥1", "조정래"); library[1] = new Book("태백산맥2", "조정래"); library[2] = new Book("태백산맥3", "조정래"); library[3] = new Book("태백산맥4", "조정래"); library[4] = new Book("태백산맥5", "조정래"); copyLibrary[0] = new Book(); copyLibrary[1] = new Book(); copyLibrary[2] = new Book(); copyLibrary[3] = new Book(); copyLibrary[4] = new Book(); for(int i=0; i<library.length; i++) { copyLibrary[i].setAuthor(library[i].getAuthor()); copyLibrary[i].setTitle(library[i].getTitle()); } library[0].setAuthor("박완서"); library[0].setTitle("나목"); System.out.println("== library =="); for(Book book : library) { System.out.println(book); book.showBookInfo(); } System.out.println(); System.out.println("== copy library =="); for(Book book : copyLibrary) { System.out.println(book); book.showBookInfo(); } } }출력 결과
- 이처럼 깊은 복사는 두개의 배열이 서로 다른 주소 값을 가르키기 때문에 한쪽 배열을 수정하더라도 다른 배열에는 아무런 영향을 주지 않습니다.