배열과 복사

김동완·2023년 4월 2일
0

Java

목록 보기
3/6
post-thumbnail

배열의 복사

기본적으로 프로그래밍언어에서 복사는 비슷하게 작동합니다. 두가지의 방법으롤 나타낼 수 있는데 '얕은복사', '깊은복사' 이렇게 두가지로 나타낼 수 있습니다.

얕은복사 :
인스턴스의 주소로 복사하는 것입니다. 그렇기에 기존의 배열에 변동이 생기면 복사한 배열에도 변동이 생기게됩니다.

깊은복사 :
인스턴스 주소를 복사하는게 아닌 새로운 인스턴스를 만들고 직접 값을 복사하는 방법입니다.

Java에서는 복사를 하기위해서는 반복문을 사용하거나 System.arraycopy()를 사용해서 복사를 진행합니다. 두번째 방법에 대한 사용법은 다음과 같습니다.

System.arraycopy(src,srcPos,dest,destPos,length)
src:복사할 배열 이름
srcPos:복사할 배열의 첫번째 위치
dest:복사해서 붙여 넣을 대상 배열 이름
destPos:복사해서 대상 배열에 붙여넣기를 시작할 첫번째 위치
length: src에서 dest로 자료를 복사할 요소 개수

그러면 예시를 보면서 이해해보겠습니다.

package array;

public class ArrayCopy {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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 으로 넣어지는 것을 확인 할 수 있습니다. 하지만 0번째가 아닌 1번째부터 넣었기 때문에 1은 그대로 남아있는 것을 확인 할 수 있습니다.

두번째 예시입니다.

package array;

public class ObjectCopy3 {

	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의 배열 인스턴스 생성
		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[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();
		}


	}

}

향상된 for문과 배열

for문은 배열의 처음부터 끝까지 모든 요소를 참조 할 때 사용하면 편리한 반복문입니다. 향상된 for문은 배열 요소값을 순서대로 하나씩 가져와 변수에 대입합니다.

package array;

public class EnhancedForLoop {

	public static void main(String[] args) {
		String[] strArray= {"Java","Android","C","JavaScript","Python"};
		
		for(String lang:strArray) {
			System.out.println(lang);
		}

	}

}

lang은 strArray요소들을 하나씩 복사하는 모습을 볼 수 있습니다.

profile
개발자가 되고 싶은 완동.

0개의 댓글