프로그래밍/C#

[C#] List에 추가된 구조체의 값

흔한티벳여우 2022. 1. 25. 10:27
반응형

많은 사람들이 아는 것과 같이 Struct는 Value Type이고 Class는 Reference Type하여 대입할 때 복사되는 방법이 다르다.

 

이 글에서 Value Type과 Reference Type을 설명하기엔 내가 너무 귀찮고 잘 정리하신 어떤분의 블로그를 첨부한다.

 

https://mathmakeworld.tistory.com/79

 

C# Value Type과 Reference Type

C#을 공부하다 보면 Value Type(값 형식)과 Reference Type(참조 형식)이라는 것을 듣게 됩니다. 이런 것들을 모르고 코딩해도 대체로 원하는 결과를 얻을 수 있습니다. 하지만 가끔가다 코드가 이해하기

mathmakeworld.tistory.com

 

자. 이제 본론으로 들어간다. 

public struct Box2D
{
    public double X { get; set; }
    public double Y { get; set; }
    public double Length { get; set; }
    public double Width { get; set; }
}

static void Main(string[] args)
{
    List<Box2D> boxes = new List<Box2D>();

    Box2D item1 = new Box2D
    {
        X = 0,
        Y = 1
    };
    boxes.Add(item1);

    Console.WriteLine("리스트 내의 구조체");
    Console.WriteLine(boxes[0].X);
    item1.X = 2;

    Console.WriteLine("구조체 값 변경 후, 리스트 내의 구조체");
    Console.WriteLine(boxes[0].X);

    Console.WriteLine("구조체 값");
    Console.WriteLine(item1.X);

    Console.ReadKey();
}

위와 같은 코드를 실행시켜보자.

그렇다면 리스트에 추가된 구조체는 어떻게 되는걸까? item1 구조체 값을 변경하면 리스트에 추가된 값까지 변경되는 걸까? 하는 생각이 들수 있다.

 

결과는 아래와 같다.

List에 객체를 추가할 당시 객체의 상태에 따라 value type 또는 reference copy가 일어나게 된다. 만약 구조체가 아니라 클래스를 사용했다면 reference type copy가 일어나기 때문에 리스트 내의 값은 변경되었을 것이다.

 

 

반응형