티스토리 뷰

반응형

 

19. 객체 배열 - 1 - 20. 객체 배열 - 2

 

| 기본 자요형 배열과 참조 자료형 배열( 객체 배열 )

기본자료형은 실제 값이 할당된 배열 인덱스 자리에 들어가지만, 객체 자료형의 경우 주솟값이 들어간다. //4바이트 - 8 바이트 정도

getter setter 의 경우, 우클릭해서   source ->  generate getter, setter 누르면 되는 것을 확인할 수 있다.

package array;

public class Book {

	private String author;
	private String title;

	public Book() {
	} // default 생성자

	public Book(String title, String author) {
		this.author = author; // 매개변수 생성자
		this.title = title;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public void showBookInfo() {
		System.out.println(title + "," + author);
	}

}

 

 

객체를 넣어줌.

앞에 타입이 들어가고 @ 뒤에는 주솟값이 들어가는 것을 확인할 수 있음.  16진수이므로 4비트 씩 8 글자 해서 32비트이다.

 

 

 

 

package array;

public class BookArrayTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Book[] library = new Book[5]; // book 자리 5개가 생긴거지 객체가 5개가 생긴 것이 아니다. (헷깔림 주의)
		
		// 책, 객체 넣어주기
		// 안하면  NullPointExceptionError 가 나는 경우가 있으니 주의하자!
		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 ( int i =0; i<library.length ; i++) {
			System.out.println(library[i]); //객체의 주솔 가지고 ㅇㅆ따.
			library[i].showBookInfo();
		}
	}

}

 

 

 

 * 배열 복사하는 법에 대해서 알아보자.

package array;

public class ArrayCopy {

	public static void main(String[] args) {
		int[] arr1 = { 10, 20, 30, 40, 50 };
		int[] arr2 = { 1, 2, 3, 4, 5 };
		System.arraycopy(arr1, 0, arr2, 1, 3);
		// 무엇을 o 어디서부터 o 어디에 o 어디부터 o 어디까지 ( 범위를 넘어서지 않게 주의한다. ) 

		for (int i = 0; i < arr2.length; i++) {

			System.out.println(arr2[i]);
		}

	}

}
/*
1
10
20
30
5
*/

* 객체 배열 복사

// 얕은 복사 => 주소만 복사됨 => 한 배열을 바꾸면, 다른 배열도 바뀜.

// 얕은 복사 => 주소만 복사됨 => 한 배열을 바꾸면, 다른 배열도 바뀜.
package array;

public class ObjectCopy {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Book[] library = new Book[5]; // book 자리 5개가 생긴거지 객체가 5개가 생긴 것이 아니다. (헷깔림 주의)
		Book[] copyLibrary = new Book[5]; // book 자리 5개가 생긴거지 객체가 5개가 생긴 것이 아니다. (헷깔림 주의)

		// 책, 객체 넣어주기
		// 안하면 NullPointExceptionError 가 나는 경우가 있으니 주의하자!
		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", "조정래");

		System.arraycopy(library, 0, copyLibrary, 0, 5);
		// 향상된 반복문
		// 타입 param: 배열
		for (Book book : copyLibrary) {
			book.showBookInfo();
		}

		/*
		 * 태백산맥1,조정래 태백산맥2,조정래 태백산맥3,조정래 태백산맥4,조정래 태백산맥5,조정래
		 * 
		 */
		
		library[0].setTitle("나목");
		library[0].setAuthor("박완서");
		
		System.out.println("=======================");
		for (Book book : copyLibrary) {
			book.showBookInfo();
		}


	}

}

 

## 깊은 복사

arraycopy 가 아니라 직접 할당 하나씩 해줘야함.

package array;

public class ObjectCopy2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Book[] library = new Book[5]; // book 자리 5개가 생긴거지 객체가 5개가 생긴 것이 아니다. (헷깔림 주의)
		Book[] copyLibrary = new Book[5]; // book 자리 5개가 생긴거지 객체가 5개가 생긴 것이 아니다. (헷깔림 주의)

		// 책, 객체 넣어주기
		// 안하면 NullPointExceptionError 가 나는 경우가 있으니 주의하자!
		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());
		}
		for (Book book : copyLibrary) {
			book.showBookInfo();
		}

		library[0].setTitle("나목");
		library[0].setAuthor("박완서");
		
		System.out.println("=======================");
		for (Book book : copyLibrary) {
			book.showBookInfo();
		}
		/*
		 * 태백산맥1,조정래
			태백산맥2,조정래
			태백산맥3,조정래
			태백산맥4,조정래
			태백산맥5,조정래
			=======================
			태백산맥1,조정래
			태백산맥2,조정래
			태백산맥3,조정래
			태백산맥4,조정래
			태백산맥5,조정래
		 */



	}


}

 

 

향상된 for문 

 

 

자바 인강이 듣고 싶다면 => https://bit.ly/3ilMbIO

반응형
댓글