인프런 커뮤니티 질문&답변

chobo님의 프로필 이미지

작성한 질문수

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

ArraySegment, Span, ReadOnlySpan 차이점

작성

·

747

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인 것 같은데 굳이 만든(?) 혹은 사용하는 이유를 잘 모르겠습니다.

답변 2

4

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

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

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

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

0

chobo님의 프로필 이미지
chobo
질문자

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

chobo님의 프로필 이미지

작성한 질문수

질문하기