inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 4: Game Server

ReaderWriterLock implementation practice

C#에서의 RAII

7

pnj991122

14 asked

0

안녕하세요 항상 좋은강의 제공해주셔서 감사합니다. C++ 서버강의를 수강하고 C#을 복습해보고 있는와중에. C++에서는 LockGuard처럼 소멸자 기반으로해서 RAII를 사용하는걸로 압니다. 하지만 C#에는 GC가있어서 메모리 해제시점을 모르니, 찾아보니 IDisposable을 상속받아서 구현할 수 있더라구요.

여기서 질문이 C#에서도 이런 RAII를 직접만들어서 관리를 자주할까요?? 그냥 lock (obj) 를 많이 쓸 것 같은데 혹시라도 직접 구현한 Lock같은경우는 어떤지 궁금합니다!

C# unity 네트워크

Answer 3

0

pnj991122

C#에서는 해당내용 언급이 없어 궁금했었습니다. 바쁘실텐데 답변감사합니다!!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. pnj991122님.

C#에서의 메모리 관리와 RAII에 대한 질문을 주셨군요. C++에서는 RAII(Resource Acquisition Is Initialization) 패턴을 통해 객체의 수명을 제어하고 리소스를 관리하지만, C#에서는 자동 메모리 관리와 가비지 컬렉터(GC)에 의해 대부분 해결됩니다. 하지만, 특정 리소스를 명확하게 해제해야 할 경우에는 IDisposable 인터페이스를 구현하여 Dispose 메소드를 사용합니다.

IDisposable을 많이 사용하는 상황은, 예를 들면 파일이나 데이터베이스 연결, 네트워크 소켓 등 비관리 리소스를 다룰 때입니다. 이 경우 using문을 활용하여 자원을 자동으로 해제하는 것도 방법입니다.

lock (obj) 구문은 스레드 안전성을 위해 객체 접근을 제어하는 일반적인 방법입니다. RAII와는 다르게 자원 해제보다 스레드 동기화에 주로 사용됩니다. 다만, 고급 사용자는 성능 상의 이유로 커스텀 Lock 메커니즘을 구현할 수 있습니다. 이 때는 적절한 성능 시험과 검증이 필요하겠습니다.

아래 유사한 질문에서 C#의 메모리 및 리소스 관리에 대한 더 구체적인 설명을 보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

Rookiss

IDisposable 등을 활용한 using 방식도 가능은 하지만,
가독성 측면에서 그냥 일반 lock (obj) 문법을 사용하는 것이 가장 좋다고 봅니다.

TLS 질문드립니다.

0

63

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

63

2

Unity Span

0

90

2

XML, Dll 차이점

0

124

2

Session 질문입니다

0

90

1

Write Read 커서 키워드

0

83

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

79

2

네트워크 Send 전담 스레드 배치

0

107

2

UnhandledException 으로 서버 터지는 경우

0

96

2

컨텐츠 단, 엔진 단

0

113

1

질문 있습니다

0

84

2

C# 게임서버 3D MMORPG

0

157

2

유니티6 버전

0

101

2

receive하는 부분과 send하는 부분의 차이

0

144

2

커서의 위치의 중요성

0

107

2

C++ 전혀 모르는데 C# 서버

0

172

2

강의에 질문이 있습니다

0

90

2

멀티스레드 이해도 질문

0

100

1

500 vs 500

0

137

3

OnAcceptHandler 액션 함수

0

65

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

197

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

84

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

110

1

스핀락 질문.

0

114

2