반응형
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을 사용해 줘야 합니다.
반응형
'C#' 카테고리의 다른 글
DBContext 를 사용하여 Migration 하는 방법 (0) | 2024.01.25 |
---|---|
Log 원하는 경로에 저장하는 방법 (0) | 2024.01.25 |
힙(Heap) , 스택(Stack) 메모리 (0) | 2024.01.23 |
GitHub Copilot Chat 사용 방법(Visual Studio) (0) | 2024.01.18 |
.NET에서 IntPtr 및 네이티브 코드와의 상호 작용 (0) | 2024.01.11 |