얕은 복사 깊은 복사
조회수 988회
using System;
namespace CopyingArray
{
class MainApp
{
static void CopyArray<T>(T[] source, T[] target)
{
for (int i = 0; i < source.Length; i++)
{
target[i] = source[i];
}
}
static void Main(string[] args)
{
string a = "hello";
string b = "GoodBye";
int[] source = { 1, 2, 3, 4 };
int[] target = new int[source.Length];
CopyArray<int>(source, target);
foreach (int element in target)
Console.WriteLine(element);
}
}
}
배열도 참조형식인데 왜 ref나 out을 쓰지 않고 깊은 복사가 된 건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
우선 얕은 복사(shallow copy)와 깊은 복사(deep copy)의 개념을 정확하게 이해하시는게 좋겠습니다.
static void CopyArray<T>(T[] source, T[] target) { for (int i = 0; i < source.Length; i++) { target[i] = source[i]; } }
올려주신 코드에서 CopyArray method가 source로부터 target에 대한 깊은 복사의 구현입니다.
얕은 복사는 아래와 같이 구현되었을 때 발생합니다.
int[] source = { 1, 2, 3, 4 }; int[] target = source;
추가
Java Data Type ㄴ Primitive Type ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char) ㄴ Reference Type ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc.
array type은 reference type이기 때문에 call by reference 로 동작합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 제가 약간 질문을 이상하게 했네요.... 깊은 복사 얕은 복사가 아닌 Call by Value를 한 것같은데 왜call by reference 처럼 되었는지가 제가 질문하고자 하는 바였습니다. 이와 관련된 내용을 찾다보니 "앞의 예제에서 참조 형식인 arr 배열은 ref 매개 변수 없이 메서드에 전달됩니다." 라는말이 있는데 맞는 건가요? 알 수 없는 사용자 2019.2.7 17:04
- 내용 추가 했습니다. 알 수 없는 사용자 2019.2.7 17:25
- 감사합니다 알 수 없는 사용자 2019.2.7 17:29
-
댓글 입력