개발자 블로그
데이터 타입(value type, reference type)(정리중) 본문
Thread safe 한 방법을 찾는 중 참조형 객체를 사용하여 동기화를 이루는 방법에 대해 보다가 참조형 객체에 대해 정리를 해봤다.
참조형 객체 : 참조(포인터)를 통해 접근하는 객체
값 형식 (Value Types)
값 형식은 데이터를 직접 저장하며, 스택(Stack)에 저장됩니다. 값 형식에는 다음과 같은 데이터 타입이 포함됩니다:
- 기본 타입: int, float, double, bool 등
- 구조체(struct)
- 열거형(enum)
값 형식 변수는 해당 변수를 할당하거나 전달할 때 실제 데이터를 복사합니다.
참조 형식 (Reference Types)
참조 형식은 실제 데이터의 참조를 저장하며, 힙(Heap)에 저장됩니다. 참조 형식에는 다음과 같은 데이터 타입이 포함됩니다:
- 클래스(class)
- 배열
- 델리게이트
- 인터페이스
참조 형식 변수는 해당 변수를 할당하거나 전달할 때 데이터에 대한 참조(메모리 주소)를 복사합니다. 이로 인해 동일한 데이터 객체에 여러 참조가 있을 수 있습니다.
// 값 형식 예제
int a = 10;
int b = a;
b = 20;
// 여기서 a는 여전히 10입니다. b의 변경은 a에 영향을 미치지 않습니다.
// 참조 형식 예제
class MyClass
{
public int Value;
}
MyClass obj1 = new MyClass();
obj1.Value = 10;
MyClass obj2 = obj1;
obj2.Value = 20;
// 여기서 obj1.Value도 20이 됩니다. obj1과 obj2는 동일한 객체를 참조합니다.
lock 문에서의 참조 형식 사용
lock 문에서 동기화 객체로 사용될 수 있는 것은 참조 형식이어야 합니다. 이는 lock 문이 동일한 객체에 대해 잠금을 설정해야 정확하게 동기화가 이루어지기 때문입니다.
다음은 참조 형식을 사용하여 lock 문을 설정하는 예제입니다:
private readonly object lockObject = new object();
public void ThreadSafeMethod()
{
lock (lockObject)
{
// 이 코드 블록은 한 번에 하나의 스레드만 접근할 수 있습니다.
}
}
잠시 C/C# 에서 차이
https://chatgpt.com/share/cf4259be-1054-43b2-8b26-f31a1981214d
'c#' 카테고리의 다른 글
1. 동기 비동기 차이 (0) | 2024.06.29 |
---|---|
Static 메서드와 Instance 메서드의 선택 기준 (0) | 2024.06.19 |