배열의 복사(Deep/Shallow)

2020. 4. 16. 17:54C#/수업내용

1. 배열을 대입 형태로 복사 : Deep Copy    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Study_010
{
    class App
    {
        public App()
        {          
            int[] a = new int[5];
            int[] b = new int[3];
 
            for (int i = 0; i < 3; i++)
            {
                b[i] = i;
            }
            a = b;                      // deep copy
                       
            b[1= 1000;
        }
    }
}
 
<a=b 형식의 복사가 이루어지는 경우> - Deep Copy
 

[a = b 복사 전]

a = {0, 0, 0, 0, 0}

b = {0, 1, 2}

 

[a = b 복사 후]

a = {0, 1, 2}

b = {0, 1, 2}

 

[b[0] = 1000으로 변경한다면]

a = {1000, 1, 2}

b = {1000, 1, 2}

 

2. Array.Copy()와 같은 메소드를 이용하여 복사 : Shallow Copy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Study_010
{
    class App
    {
        public App()
        {            
            int[] a = new int[5];
            int[] b = new int[3];
 
            for (int i = 0; i < 3; i++)
            {
                b[i] = i;
            }
            
            Array.Copy(b, a, b.Length); // shallow copy
 
            b[1= 1000;
        }
    }
}
 

<Array.Copy() 메소드로 복사가 이루어지는 경우> - Deep Copy

[a = b 복사 전]

a = {0, 0, 0, 0, 0}

b = {0, 1, 2}

 

[a = b 복사 후]

a = {0, 1, 2, 0, 0}

b = {0, 1, 2}

 

[b[0] = 1000으로 변경한다면]

a = {0, 1, 2, 0, 0}

b = {1000, 1, 2}

 

-> 각각의 객체가 어떻게 다루어지는지 인지해야 할 필요가 있음

 

3. C++와 동일하게 조사식에서 &를 이용하여 주소값을 찍어볼 수 있다고 함.

나중에 꼭 확인해보자 고양이랑 맨날 쳐 놀지말고 진혁아