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

김성규님의 프로필 이미지
김성규

작성한 질문수

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

채팅 테스트 #1

GameRoom에서 세션 관리에 List를 사용한 이유가 궁금합니다.

해결된 질문

작성

·

334

0

Room에 Enter와 Leave를 통해 채팅에 참여하고 나갈 수 있습니다.

그리고 해당 session들을 순회하면서 모든 세션에 메시지를 보내야 합니다.

 

여기서 의문 사항은 참여하는 것에는 List(ArrayList)는 O(1)인데, 나가는 작업이 발생하면 자칫 O(n)이 발생할 수도 있다고 생각했습니다.

이유는 해당 session을 찾는데 linear하게 순회해서 찾아내야 하고, 해당 session을 제거하고나서 빈 공간을 앞으로 당겨줘야 하기 때문입니다.

 

이 때문에 제 생각엔 HashSet을 사용하는 것이 좋을 것이라 생각했습니다.

 

혹시 List를 사용한 이유가 Enter Leave 연산보다 Broadcast가 훨씬 많이 이용되고 있기 때문

순회가 HashSet보다 List가 훨씬 빠르기 때문인가요?

 

언제나 양질의 강의에 감사드립니다.

답변 1

1

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

방이 생성되고 삭제되는 경우가 그렇지 흔하지 않다면 List로 가도 무방하고,
그렇지 않다면 HashSet으로 가도 되고
이런 부분은 자유롭게 고치셔도 무방합니다.

김성규님의 프로필 이미지
김성규

작성한 질문수

질문하기