강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của eletea284363
eletea284363

câu hỏi đã được viết

[Series Phát triển Game MMORPG với C# và Unity] Part4: Game Server

ArraySegment, Span, ReadOnlySpan 차이점

Viết

·

945

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#unitynetwork

Câu trả lời 2

4

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

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

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

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

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

0

chobo님의 프로필 이미지
chobo
Người đặt câu hỏi

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

Hình ảnh hồ sơ của eletea284363
eletea284363

câu hỏi đã được viết

Đặt câu hỏi