int[] arr = new int[10];
Book[] library = new Book[5];
예제
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 showInfo() {
System.out.println(title+","+author);
}
예제를 위해 Book 인스턴스를 만들고 변수, 생성자, get/set메서드, showInfo 메서드를 작성한다
public class BookArrayTest {
public static void main(String[] args) {
//1번
Book[] library = new Book[5]; //책이 5권생긴게 아니다, address만가지고있다.
//3번
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","조정래");
//2번
for(int i=0; i<library.length; i++) {
System.out.println(library[i]);
library[i].showInfo();
}
/*결과값
array.Book@5305068a
태백산맥1,조정래
array.Book@1f32e575
태백산맥2,조정래
array.Book@279f2327
태백산맥3,조정래
array.Book@2ff4acd0
태백산맥4,조정래
array.Book@54bedef2
태백산맥5,조정래 */
}
1번 : BookArrayTest 클래스를 만들고 객체배열 library를 생성한다.(여기서 new는 배열생성의 new이지 인스턴스 생성자가 아니다)
2번 : for문을 통해 객체배열을 출력하면 배열에 담겨있는 인스턴스의 주소값이 출력되는데 아직 배열을 입력하기 전이라 null값이 5개 출력된다.
3번 : 객체 배열 library를 채우기 위해 생성자를 통해 Book의 인스턴스를 5개 선택한다. 그 후 2번의 출력문을 다시 출력하면 각 인스턴스의 주소값과 showInfo메서드를 통해 title과 author가 출력된다.
public static void main(String[] args) {
//1번
int[] arry1 = {10,20,30,40,50};
int[] arry2 = {1, 2, 3, 4, 5};
//2번
System.arraycopy(arry1, 0, arry2, 1, 3);
//3번
for(int i=0; i<arry2.length; i++) {
System.out.println(arry2[i]);
}
/*결과물
1
10
20
30
5
*/
}
public static void main(String[] args) {
//1번
Book[] library = new Book[5];
Book[] copyLibrary = new Book[5];
//2번
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","조정래");
//3번
System.arraycopy(library, 0, copyLibrary, 0, 5);
//4번
for(Book book : copyLibrary) {
book.showInfo();
}
//결과물
태백산맥1,조정래
태백산맥2,조정래
태백산맥3,조정래
태백산맥4,조정래
태백산맥5,조정래
}
//1번
library[0].setTitle("나목");
library[1].setTitle("박완서");
//2번
for(Book book : library) {
book.showInfo(); }
System.out.println("=============");
for(Book book : copyLibrary) {
book.showInfo(); }
//결과물
박완서,조정래
태백산맥2,조정래
태백산맥3,조정래
태백산맥4,조정래
태백산맥5,조정래
=============
박완서,조정래
태백산맥2,조정래
태백산맥3,조정래
태백산맥4,조정래
태백산맥5,조정래
//1번
copyLibrary[0] = new Book();
copyLibrary[1] = new Book();
copyLibrary[2] = new Book();
copyLibrary[3] = new Book();
copyLibrary[4] = new Book();
//2번
for ( int i= 0; i<library.length; i++) {
copyLibrary[i].setAuthor(library[i].getAuthor());
copyLibrary[i].setTitle(library[i].getTitle());
}
//3번
library[0].setTitle("나목");
library[0].setTitle("박완서");
for(Book book : library) {
book.showInfo(); }
System.out.println("=============");
for(Book book : copyLibrary) {
book.showInfo(); }
1번 : 직접 값을 대입하기 위해 copyLibrary에 인스턴스를 생성합니다.
2번 : for문을 통해 copyLibarary에 author에 library의 Author를 대입하고 Title도 대입합니다.
3번 : 얕은 예제와 같이 library[0]에 내용을 바꾸고 두 배열을 출력하면 이번엔 library만 바뀌고 카피본은 안바뀐 것을 확인할 수 있습니다. 이처럼 주소가 아닌 원보값을 카피본에 직접대입하는 복사를 깊은복사라고하고 필요에 따라 얕은복사와 깊은 복사 중 선택하여 사용할 수 있습니다.
위의 예제에서 사용된 for문으로 배열의 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문으로 구조는 다음과 같습니다.
for(변수 : 배열){
반복 실행문
}