작성
·
753
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
TryWriteBytes와 같은 함수를 사용하고 싶은데
해당 함수에서 인자를 Span 형식으로 받아주기 때문에
Span으로 만들어준 것이고 엄청 심오한 뜻은 없습니다.
ReadOnlySpan은 Span의 'const' 버전이라고 볼 수 있는데
데이터는 고치지 않고 말 그대로 Read만 할 경우에 변환해서 사용하면 됩니다.
(Span도 읽을 수 있는데 왜 굳이! 라고 생각할 수도 있겠지만
상황에 따라 Write가 필요없다면 안정성을 보장하는 버전을 사용해서 나쁠건 없죠)
ArraySegment vs Span은 거의 비슷한 용도인데
Span이 조금 더 활용 범위가 넓고 (ex. 스택에 올라간 데이터도 사용 가능) 빠르지만,
사실 둘다 거의 쓸 일이 없기 때문에 굳이 연구하실 필요는 없습니다.
서버 강의에서는 학습 용도로 Packet을 자체 제작 포맷으로 만들지만,
나중에 Part7에서는 이 부분을 다 날리고 구글 Protobuf로 대체하게 됩니다.
0