요약

1. destArr가 값을 변경하면, 깊은 복사는 원본에 영향이 없고 얕은 복사는 원본이 같이 바뀝니다.

2. srcArr.CopyOf(destArr, destArr가 값을 받기 시작할 index)

3. 복사 받을 데이터의 크기가 destArr의 크기를 넘어가면 오류가 납니다.

 

아래부터 설명 시작합니다!


CopyTo 메소드는 이름처럼 배열을 복사하는 메소드로 깊은 복사 입니다.

깊은 복사는 복사한 배열의 값을 바꿔도 원본 배열의 값이 바뀌지 않는 복사를 말합니다.

 

깊은 복사와 얕은 복사 코드
깊은 복사와 얕은 복사 결과

 

결과를 보면 깊은 복사는 원본이 바뀌지 않고, 얕은 복사는 원본도 같이 바뀌는 것을 볼 수 있습니다.

 

위의 코드에서 CopyTo를 사용했습니다.

srcArr.CopyTo(destArr, 0); 를 뜯어보면,

srcArr은 원본 배열, destArr은 복사 받을 배열입니다.

그런데 저는 여기서 두번째 인자가 무슨 뜻인지 헷갈렸습니다.

 

1. 원본 배열의 0번째 인덱스부터 값을 복사한다.

2. 복사 받을 배열이 0번째 인덱스부터 값을 받는다.

 

이렇게 2가지로 헷갈려서 직접 테스트 해봤습니다.

 

테스트 코드

명확한 확인을 위해 destArr의 크기를 10으로 바꿨습니다.

 

테스트 결과

destArr의 0번째 인덱스의 값이 0이고, 1번째부터 5번째 인덱스까지 값이 복사된 것을 확인할 수 있습니다.

즉, 2번이 맞는 것을 확인했습니다.

 

그리고 몇가지 더 테스트 했습니다.

 

destArr의 크기가 복사 받을 크기보다 작으면 오류가 납니다.

 

위의 두 가지를 응용해서,

srcArr와 destArr의 크기가 같지만,

destArr의 1번째 인덱스부터 값을 받기 때문에 이 코드 또한 크기를 벗어나 오류가 납니다.


제가 공부한 부분을 정리한 내용이기 때문에 틀린 부분 있을 수 있습니다!!

혹시 틀린 부분이 있으면 알려주세요!!

'C#' 카테고리의 다른 글

[C#] 다형성, virtual과 override  (0) 2022.09.06
[C#] 상속을 해보자  (0) 2022.08.27
[C#] 암묵적 구현과 명시적 구현  (0) 2022.08.23
[C#] 추상 클래스와 인터페이스  (0) 2022.08.19
[C#] 객체지향 언어에 대하여(OOP)  (0) 2022.08.10

+ Recent posts