C#

C# 참조 타입 , 값 타입 (ref, out 사용)

검은고양이개발자 2024. 1. 23. 13:51
반응형

C# 언어는 참조 타입(reference type)과 값 타입(value type)을 갖는 주요 데이터 타입을 제공합니다.

이 두 가지 타입은 변수의 성격과 메모리에 저장되는 방식에서 차이가 있습니다.

이에 대한 이해는 C# 프로그래밍에서 핵심적인 역할을 합니다.

 

참조 타입 (Reference Type)


  • 대표적인 참조 타입: 클래스(class), 인터페이스(interface), 델리게이트(delegate), 배열(array) 등
  • 저장 위치: *힙(heap) 메모리에 저장
  • 변수: 변수는 힙에 저장된 객체의 참조를 가짐
  • 특징: 여러 변수가 동일한 객체를 참조할 수 있음
  • 전달 방식: 메서드에 전달되면 객체의 참조가 복사되므로, 객체의 속성을 변경하면 원본 객체에 영향을 미침

 

값 타입 (Value Type)


  • 대표적인 값 타입: int, float, bool, struct 등
  • 저장 위치: *스택(stack) 메모리에 저장
  • 변수: 변수는 값 자체를 가짐
  • 특징: 독립된 값으로 복사되어 사용되며, 변경이 다른 변수에 영향을 미치지 않음
  • 전달 방식: 메서드에 전달되면 값이 복사되어 전달되므로, 메서드 내에서의 변경이 원본 변수에 영향을 미치지 않음

*힙(Heap) & 스택(Stack) 관련 글 

-> https://cordcat.tistory.com/170

 

 

메서드 변수에 ref, out 사용


참조 타입인 경우 변수를 메서드에 전달하면, 메서드 내에서 해당 객체의 속성을 변경하면 원래 객체에도 영향을 미칩니다.

'반면에 값 타입은 스택에 저장되어 변수를 메서드에 전달하면, 그 값의 복사본이 전달되므로 메서드 내에서 해당 변수를 변경해도 원래 변수에는 영향을 미치지 않습니다.

 

즉, 메서드의 변수로 넣었을 때 그 변수가 참조 타입인 경우 ref 나 out 없이 그대로 사용해도 메서드 내에서 변수 값이 변화가 생기면 그대로 변수의 값이 변동되는데 값 타입인 경우 ref 나 out을 사용해 줘야 합니다.

반응형