[C#] 13. 참조 형식과 값 형식

Connected Brain·2025년 4월 25일

면접 질문 대비

목록 보기
13/60

참조 형식과 값 형식에 대해 설명해주세요.

한 줄 요약

참조 형식 : 특정 변수를 다른 변수에 저장할 때 독립적인 복사본이 아닌 같은 메모리 주소를 참조하도록 함. 힙 메모리 영역에 저장되는 형식
값 형식 : 다른 변수에 저장할 때 독립적인 복사본을 생성하여 전달. 스택 메모리 영역에 저장되는 형식

값 형식

  • 값 형식을 가지는 변수들은 다른 변수에서 해당 변수를 저장할 때, 해당 값 자체를 저장하는 형식
  • int a에 저장된 값을 int b = a로 전달할 때, 값을 복사해서 전달하므로, 향후 a의 값에 변화가 있어도 b의 값에는 영향을 주지 못함
  • int, float, bool, struct 등은 값 형식을 가짐
  • 해당 변수들은 일반적으로 null을 가질 수 없고, 해당 변수를 선언할 때 값을 입력하지 않으면, 초기에 설정되는 기본 값이 존재(0, flase 등)

참조 형식

  • 참조 형식은 다른 변수에서 해당 변수를 저장할 때 값의 복사본을 저장하는 것이 아니라, 해당 값의 메모리 주소를 참조
    따라서 기존 변수의 변화가 해당 변수를 참조하는 다른 변수에게도 반영됨
  • 클래스로 만들어진 인스턴스들은 참조 형식임
  • 해당 변수들은 null 값을 가질 수 있으므로 사용시 null 여부를 확인하는 과정이 필요할 수 있음

요약 비교:

특징값 형식 (Value Type)참조 형식 (Reference Type)
저장 위치주로 스택 (일부 예외 있음)객체는 힙, 변수는 스택 (주소 저장)
변수 할당값 자체 복사 (독립적)주소(참조) 복사 (동일 객체 가리킴)
메서드 전달값에 의한 전달 (Pass by Value)참조 값에 의한 전달 (Pass by Value of Reference)
기본값타입별 기본값 (0, false, '\0' 등)null
Null 허용일반적으로 허용 안 함 (Nullable 제외)허용함
메모리 관리스코프 벗어나면 자동 해제가비지 컬렉터(GC)에 의해 관리
성능빠름상대적으로 느림 (힙 오버헤드, GC)
예시int, float, struct, enumclass, interface, delegate, string

0개의 댓글