[Java] 배열 복사

정재현·2024년 1월 17일

Java

목록 보기
15/43
post-thumbnail

배열 복사의 종류

  • 배역은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가지기 때문에
    대입 연산자 =를 통해서 복사를 하게되면 주소값을 복사하게 된다.

얕은 복사(주소값 복사)

: 주소값만 복사되고 실제값은 1개로 유지되는 복사

int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정 (1 -> 3)

System.out.println(a[0]); // 출력 3  <- a 배열의 0번째 순번값도 3으로 조회

깊은 복사(표면값 복사)

: 진짜 새로운 배열을 똑같이 만드는 복사

  • 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사해주면 됨
// 깊은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length]; 

for (int i = 0; i < a.length; i++) {
    b[i] = a[i]; // 깊은 복사
}

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정 (1 -> 3)

System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로
  • 메서드 clone()을 이용한 깊은 복사 방법
// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 가장 간단한 방법
				// clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작
  • 메서드 copyOf()를 이용한 깊은 복사 방법
import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		// 2. Arrays.copyOf() 메서드
		int[] a = { 1, 2, 3, 4 };
		int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줌
	}
}

profile
공부 기록 보관소

0개의 댓글