inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

ArraySegment, Span, ReadOnlySpan 차이점

962

chobo

작성한 질문수 28

0

선생님 안녕하세요!

Serialization 1강부터 Span<T>를 사용하셨는데

ArraySegment<T>와 Span<T>는 동일하게 원본 배열의 일부분을 찝어내는 것 같은데 

혹시 다른 차이점이 있어서 Span<T>를 사용하신 것 가요?

MSDN에서 Span<T>를 찾아봤지만 어려워서 무슨 말인지 이해를 하지 못했습니다.....

그리고 굳이 ReadOnlySpan<T>을 사용하는 이유도 궁금합니다.

질문을 정리하면

[질문 1] ArraySegment와 Span.Slice는 동일하게 원본 배열의 일부분을 찝어주는 역할을 수행하는 것 같은데

어떤 차이점 때문에 Span을 사용하셨는지 궁금합니다.

[질문 2] ReadOnlySpan<T>은 Span의 getter인 것 같은데 굳이 만든(?) 혹은 사용하는 이유를 잘 모르겠습니다.

C# unity network

답변 2

4

Rookiss

TryWriteBytes와 같은 함수를 사용하고 싶은데
해당 함수에서 인자를 Span 형식으로 받아주기 때문에
Span으로 만들어준 것이고 엄청 심오한 뜻은 없습니다.

ReadOnlySpan은 Span의 'const' 버전이라고 볼 수 있는데
데이터는 고치지 않고 말 그대로 Read만 할 경우에 변환해서 사용하면 됩니다.
(Span도 읽을 수 있는데 왜 굳이! 라고 생각할 수도 있겠지만
상황에 따라 Write가 필요없다면 안정성을 보장하는 버전을 사용해서 나쁠건 없죠)

ArraySegment vs Span은 거의 비슷한 용도인데
Span이 조금 더 활용 범위가 넓고 (ex. 스택에 올라간 데이터도 사용 가능) 빠르지만,
사실 둘다 거의 쓸 일이 없기 때문에 굳이 연구하실 필요는 없습니다.

서버 강의에서는 학습 용도로 Packet을 자체 제작 포맷으로 만들지만,
나중에 Part7에서는 이 부분을 다 날리고 구글 Protobuf로 대체하게 됩니다.

0

chobo

친절한 답변 감사드립나다.!!

TLS 질문드립니다.

0

39

2

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

0

45

2

Unity Span

0

72

2

XML, Dll 차이점

0

103

2

Session 질문입니다

0

78

1

Write Read 커서 키워드

0

72

1

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

0

68

2

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

0

97

2

UnhandledException 으로 서버 터지는 경우

0

84

2

컨텐츠 단, 엔진 단

0

103

1

질문 있습니다

0

76

2

C# 게임서버 3D MMORPG

0

143

2

유니티6 버전

0

96

2

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

0

132

2

커서의 위치의 중요성

0

102

2

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

0

169

2

강의에 질문이 있습니다

0

85

2

멀티스레드 이해도 질문

0

94

1

500 vs 500

0

127

3

OnAcceptHandler 액션 함수

0

60

1

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

0

187

2

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

0

81

2

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

0

104

1

스핀락 질문.

0

109

2