C#고급 주제

값 타입과 참조 타입

변수 대입과 함수 호출에서 복사가 일어나는지, 같은 객체를 공유하는지 이해하기 위한 C# 핵심 비교 카드입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
int a = 10;
int b = a;
b = 20;

Player first = new Player("Mina");
Player second = first;
second.Name = "Jin";

설명

  • 값 타입은 변수 안에 값 자체가 들어 있으므로 대입하면 값이 복사됩니다.
  • 참조 타입은 객체를 가리키는 참조를 담고 있으므로 대입하면 같은 객체를 함께 바라보게 됩니다.
  • int, double, bool, struct는 대표적인 값 타입이고, class, string, 배열은 참조 타입입니다.
  • 버그의 상당수는 "복사된 줄 알았는데 공유 중"이거나 그 반대 상황에서 생깁니다.

짧은 예제

csharp
public class Player
{
    public Player(string name) => Name = name;
    public string Name { get; set; }
}

Player first = new Player("Mina");
Player second = first;

second.Name = "Jin";

Console.WriteLine(first.Name); // Jin

빠른 정리

항목설명
값 타입대입 시 값 복사
참조 타입대입 시 참조 공유
대표 값 타입int, double, bool, struct
대표 참조 타입class, 배열, string
흔한 실수공유 여부를 잘못 가정하는 것

주의할 점

string은 참조 타입이지만 불변입니다. 그래서 "참조 타입 = 항상 내부 값이 바뀐다"라고 단순화해서 이해하면 오해가 생길 수 있습니다.