개발자 블로그

데이터 타입(value type, reference type)(정리중) 본문

c#

데이터 타입(value type, reference type)(정리중)

youngsunny 2024. 6. 18. 23:21

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

 

ChatGPT

A conversational AI system that listens, learns, and challenges

chatgpt.com

 

'c#' 카테고리의 다른 글

1. 동기 비동기 차이  (0) 2024.06.29
Static 메서드와 Instance 메서드의 선택 기준  (0) 2024.06.19