참조 형식(Reference types)

참조 형식(Reference types)

C#에는 **참조 형식(Reference types)**과 값 형식(Value types), 두 가지 종류의 형식이 있어요. 참조 형식의 변수는 데이터(객체)를 담는 대신 그 참조(위치)를 저장하고, 값 형식의 변수는 데이터를 그대로 담아요. 이 차이가 실제 코드에서 굉장히 크게 와닿는데, 여기서부터 차근차근 보죠.

참조 형식에서는 두 변수가 같은 객체를 가리킬 수 있어요. 그래서 한 변수에 무언가를 하면, 그 객체를 함께 가리키던 다른 변수에도 그 영향이 그대로 나타나죠. 반대로 값 형식은 변수마다 데이터의 사본을 따로 가져요. 그래서 한 변수에서 무언가를 바꿔도 다른 변수에는 아무 영향이 없어요. 예외는 in, ref, out 파라미터 변수인데, 이 경우엔 값이 아니라 참조가 전달돼서 서로 영향을 주게 돼요.

이 키워드들이 실제로 어떻게 쓰이는지는 각 문서에서 더 자세히 볼 수 있는데, 지금은 '값 형식도 파라미터로 넘길 때는 참조처럼 동작할 수 있다'는 정도로 이해하고 넘어가면 돼요.

[!INCLUDEcsharp-version-note]

본문

참조 형식을 선언할 때 쓰는 키워드는 다음과 같아요.

C#이 기본으로 제공하는 참조 형식도 따로 있어요.

string이나 object 같은 형식이 왜 값이 아니라 참조로 다뤄지는지 궁금할 수 있는데, 바로 이런 형식들이 그 답이에요. 참조 형식이라고 해서 무조건 내가 class로 직접 만들어야 하는 건 아니고, C#이 이미 준비해 둔 것들도 있다고 기억해 두면 좋겠죠.

더 알아보기

출처: Reference types (C# reference)