얕은 복사 깊은 복사

조회수 72회
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 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    우선 얕은 복사(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
    • 내용 추가 했습니다. Peter 2019.2.7 17:25
    • 감사합니다 장대한 2019.2.7 17:29

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.