기본 패턴
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은 참조 타입이지만 불변입니다. 그래서 "참조 타입 = 항상 내부 값이 바뀐다"라고 단순화해서 이해하면 오해가 생길 수 있습니다.