inflearn logo
강의

Course

Instructor

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

ArraySegment, Span, ReadOnlySpan 차이점

961

chobo

28 asked

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

Answer 2

4

Rookiss

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

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

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

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

0

chobo

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

TLS 질문드립니다.

0

37

2

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

0

41

2

Unity Span

0

67

2

XML, Dll 차이점

0

99

2

Session 질문입니다

0

75

1

Write Read 커서 키워드

0

69

1

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

0

66

2

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

0

94

2

UnhandledException 으로 서버 터지는 경우

0

82

2

컨텐츠 단, 엔진 단

0

100

1

질문 있습니다

0

73

2

C# 게임서버 3D MMORPG

0

141

2

유니티6 버전

0

94

2

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

0

128

2

커서의 위치의 중요성

0

99

2

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

0

165

2

강의에 질문이 있습니다

0

83

2

멀티스레드 이해도 질문

0

90

1

500 vs 500

0

122

3

OnAcceptHandler 액션 함수

0

57

1

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

0

186

2

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

0

79

2

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

0

100

1

스핀락 질문.

0

104

2