특정 로직에서 배열 or 리스트를 반복문을 돌려

 

배열 or 리스트 안 요소를 활용하여

 

반복하는 대상인 원본 배열 or 리스트에는

 

영향을 주지 않고 데이터를

 

가공해야 하는 경우가 있을 수 있다.

 

이런 경우에 보통 배열 or 리스트를 복사하여

 

복사한 대상을 가공하는데 여기서 원본 대상에는 

 

영향을 주지 않으려면 얕은 복사가 아닌 깊은 복사를 해야

 

원본에는 영향을 주지 않는다.

 

// 배열 Array (얕은 복사)

int[] ogArr = {1, 2, 3}; // 원본 배열
int[] sCopyArr = ogArr; // 새 배열에 얕은 복사

sCopyArr[1] = 777;

/* 윗 줄에서 복사한 배열의 1번째 인덱스에 새 정수 777을 담았는데 
원본 배열에도 영향을 줘서 아래와 같이 출력 됨 */
System.out.println(Arrays.toString(ogArr)); // 원본 배열 : [1, 777, 3]
System.out.println(Arrays.toString(sCopyArr)); // 얕은 복사한 배열 : [1, 777, 3]



// 배열 Array (깊은 복사)

int[] ogArr = {1, 2, 3}; // 원본 배열
int[] dCopyArr = Arrays.copyOf(ogArr, ogArr.length); // 새 배열에 깊은 복사

dCopyArr[1] = 777;

/* 윗 줄에 복사한 배열의 1번째 인덱스에 새 정수 777 을 담아도 
원본 배열에는 영향을 주지 않아서 아래와 같이 출력 됨 */
System.out.println(Arrays.toString(ogArr)); // 원본 배열 : [1, 2, 3]
System.out.println(Arrays.toString(dCopyArr)); // 깊은 복사한 배열 : [1, 777, 3]

 

 

// 리스트 List (얕은 복사)

List<String> ogList = new ArrayList<>(); // 원본 리스트
ogList.add("사과");
ogList.add("바나나");

List<String> sCopyList = ogList; // 새 리스트에 얕은 복사

sCopyList.add("오렌지");

/* 윗 줄에서 복사한 리스트에 새로운 요소를 추가 (add) 했지만 
원본 리스트에도 영향을 줘서 아래와 같이 출력 됨 */
System.out.println(ogList); // 원본 리스트 : [사과, 바나나, 오렌지]
System.out.println(sCopyList); // 얕은 복사한 리스트 : [사과, 바나나, 오렌지]



// 리스트 List (깊은 복사)

List<String> ogList = new ArrayList<>(); // 원본 리스트
ogList.add("사과");
ogList.add("바나나");

List<String> dCopyList = new ArrayList<>(ogList); // 새 리스트에 깊은 복사

dCopyList.add("오렌지");

/* 윗 줄에서 복사한 리스트에 새로운 요소를 추가 (add) 했지만 
원본 리스트에도 영향을 줘서 아래와 같이 출력 됨 */
System.out.println(ogList); // 원본 리스트 : [사과, 바나나]
System.out.println(dCopyList); // 깊은 복사한 리스트 : [사과, 바나나, 오렌지]

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기