내배캠에서 제시한 문제를 풀던 와중 깊은 복사, 얕은 복사의 차이점을 찾던 도중 해당 부분에 대한 이해를 스택 메모리와 힙 메모리에 대한 정리가 필요해보여서 해당 내용을 정리하려 한다.
스택 메모리는 함수 호출과 관련된 데이터를 저장하는데 사용되는메모리 영역이다. 후입선출 구조로 관리된다.
힙 메모리는 동적으로 할당된 메모리를 저장하는데 사용된다. 다양한 크기의 데이터를 저장할 수 있고 동적으로 메모리를 할당하고 해제하는데 사용된다.
깊은 복사는 값 타입을 복사하는 것으로 주로 스택 메모리에 저장되며, 복사하면 실제 값이 복사되며, 독립적이다.
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
public class Program
{
public static void Main()
{
Point point1 = new Point(10, 20);
Point point2 = point1;
point2.X = 30;
Console.WriteLine("Point 1 X: " + point1.X);
Console.WriteLine("Point 2 X: " + point2.X);
}
}
위 코드를 실행하면 각각 10, 30이라는 출력 값이 나온다.
얕은 복사는 참조 타입 복사로 힙 메모리에 저장된다. 참조 타입은 실제 데이터가 저장된 위치(메모리 주소)를 저장하며 이를 복사하면 실제 데이터가 저장된 위치(메모리 주소)를 복사하기 때문에 동일한 객체를 가리키게 된다.
class Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
public class Program
{
public static void Main()
{
Point p1 = new Point(10, 20);
Point p2 = p1; // 얕은 복사
p2.X = 30;
Console.WriteLine(p1.X); // 출력: 30
Console.WriteLine(p2.X); // 출력: 30
}
}
위 코드를 실행하면 각각 30, 30의 출력이 나온다