CharArray
public class CharArray {

public static void main(String[] args) {

	char[] alphabets = new char[26];
	char ch = 'A';

	for(int i = 0; i < alphabets.length; i++, ch++) {
		alphabets[i] = ch;
	}

	for(int i = 0; i < alphabets.length; i++) {
		System.out.println(alphabets[i] + " = " + (int)alphabets[i]);
	}
}
}
A = 65..... Z = 90

알파벳을 아스키코드로 변환하는 식

 

 

BookArray
public class Book {

private String bookName;
private String author;

public Book() {}

public Book(String bookName, String author) {
	this.bookName = bookName;
	this.author = author;
}

public String getBookName() {
	return bookName;
}

public void setBookName(String bookName) {
	this.bookName = bookName;
}

public String getAuthor() {
	return author;
}

public void setAuthor(String author) {
	this.author = author;
}
public void showBookInfo() {
	System.out.println(bookName + ", " + author);
}
}
public class BookArray {

public static void main(String[] args) {
	Book[] library = new Book[5];

	for(int i = 0; i < library.length; i++) {
		System.out.println(library[i]);
	}
}
}
null
null
null
null
null

 

BookArray2
public class BookArray2 {

public static void main(String[] args) {
	Book[] library = new Book[5];

	library[0] = new Book("태백산맥", "조정래");
	library[1] = new Book("데미안", "헤르만 헤세");
	library[2] = new Book("어떻게 살 것인가", "유시민");
	library[3] = new Book("토지", "박경리");
	library[4] = new Book("어린왕자", "생텍쥐페리");

	for(int i = 0; i < library.length; i++) {
		library[i].showBookInfo();
	}


	for(int i = 0; i < library.length; i++) {
		System.out.println(library[i]);
	}
}
}
태백산맥, 조정래 day5.Book@15db9742
데미안, 헤르만 헤세 day5.Book@6d06d69c
어떻게 살 것인가, 유시민 day5.Book@7852e922
토지, 박경리 day5.Book@4e25154f
어린 왕자, 생텍쥐페리 day5.Book@70dea4e

 

ObjectCopy
public class ObjectCopy1 {

public static void main(String[] args) {
	Book[] bookArray1 = new Book[3];
	Book[] bookArray2 = new Book[3];

	bookArray1[0] = new Book("태백산맥", "조정래");
	bookArray1[1] = new Book("데미안", "헤르만 헤세");
	bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
	System.arraycopy(bookArray1, 0, bookArray2, 0, 3);

	for(int i = 0; i < bookArray2.length; i++) {
		bookArray2[i].showBookInfo();
	}
}
}
태백산맥, 조정래
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민

 

 

얕은 복사(Shallow Copy)란?

얕은 복사는 새 객체 B가 생성되며 A의 필드 값들은 B로 복사된다.

필드 복사(field copy)라고도 한다.

얕은 복사는 단순하고 일반적으로 비용이 적으므로 단순히 비트를 정확히 복사함으로써

구현할 수 있는 것이 보통이다.

 

얕은 복사
public class ShallowCopy1 {		// 얕은 복사(Shallow Copy)

public static void main(String[] args) {
	Book[] bookArray1 = new Book[3];
	Book[] bookArray2 = new Book[3];

	bookArray1[0] = new Book("태백산맥", "조정래");
	bookArray1[1] = new Book("데미안", "헤르만 헤세");
	bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
	System.arraycopy(bookArray1, 0, bookArray2, 0, 3);

	for(int i = 0; i < bookArray2.length; i++) {
		bookArray2[i].showBookInfo();
	}

		bookArray1[0].setBookName("나목");
		bookArray1[0].setAuthor("박완서");

		System.out.println("=== bookArray1 ===");
		for(int i = 0; i < bookArray1.length; i++) {
			bookArray1[i].showBookInfo();
		}

		System.out.println("=== bookArray2 ===");
		for(int i = 0; i < bookArray2.length; i++) {
			bookArray2[i].showBookInfo();
}
}
}
태백산맥, 조정래
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
=== bookArray1 ===
나목, 박완서
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
=== bookArray2 ===
나목, 박완서
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민

 

깊은 복사(Deep Copy)란?

얕은 복사의 대안이다.

이는 필드가 역참조됨을 의미한다.

즉, 복사되는 객체에 대한 참조 대신, 참조가 되는

모든 객체를 위한 새 사본의 객체가 만들어진다.

깊은 복사는 추가 객체의 생성이 필요하기 때문에

비용이 더 많으며, 참조가 잠재적으로 복잡한 그래프를

형성할 수 있기 때문에 상당히 더 복잡하다.

 

깊은 복사
public class DeepCopy1 {  // 깊은 복사(Deep Copy)

public static void main(String[] args) {
	Book[] bookArray1 = new Book[3];
	Book[] bookArray2 = new Book[3];

	bookArray1[0] = new Book("태백산맥", "조정래");
	bookArray1[1] = new Book("데미안", "헤르만 헤세");
	bookArray1[2] = new Book("어떻게 살 것인가", "유시민");

	bookArray2[0] = new Book();	// 객체 직접 생성
	bookArray2[1] = new Book();
	bookArray2[2] = new Book();

	for(int i = 0; i < bookArray1.length; i++) {	// 각각의 요소를 복사
		bookArray2[i].setBookName(bookArray1[i].getBookName());
		bookArray2[i].setAuthor(bookArray1[i].getAuthor());
	}

	for(int i = 0; i < bookArray2.length; i++) {	// 복사된 내용 확인
		bookArray2[i].showBookInfo();
	}
	bookArray1[0].setBookName("나목");	// bookArray1의 내용 수정
	bookArray1[0].setAuthor("박완서");

	System.out.println("=== bookArray1 ===");		// bookArray1 출력
	for(int i = 0; i < bookArray1.length; i++) {
		bookArray1[i].showBookInfo();
	}

	System.out.println("=== bookArray2 ===");		// bookArray2 출력
	for(int i = 0; i < bookArray2.length; i++) {
		bookArray2[i].showBookInfo();				// bookArray1과 다른 내용으로 출력됨
		}
	}
}
태백산맥, 조정래
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
=== bookArray1 ===
나목, 박완서
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
=== bookArray2 ===
나목, 박완서
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민

결괏값은 얕은 복사랑 같음

 

ArrayList
import java.util.ArrayList;

public class ArrayList1 {

public static void main(String[] args) {

	ArrayList<Book> library = new ArrayList<Book>();

	library.add(new Book("태백산맥", "조정래"));
	library.add(new Book("데미안", "헤르만 헤세"));
	library.add(new Book("어떻게 살 것인가", "유시민"));
	library.add(new Book("토지", "박경래"));
	library.add(new Book("어린왕자", "생텍쥐페리"));

	for(int i = 0; i < library.size(); i++) {
		Book book = library.get(i);
		book.showBookInfo();
	}

	System.out.println();
	System.out.println("=== 향상된 for문 사용 ===");
	for(Book book : library) {
		book.showBookInfo();
	}
}
}
태백산맥, 조정래
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
토지, 박경래
어린 왕자, 생텍쥐페리

=== 향상된 for문 사용 ===
태백산맥, 조정래
데미안, 헤르만 헤세
어떻게 살 것인가, 유시민
토지, 박경래
어린왕자, 생텍쥐페리

 

 

 

+ Recent posts