인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

서태준님의 프로필 이미지
서태준

작성한 질문수

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

Packet Generator #5

switch문과 딕셔너리 효율 질문입니다.

작성

·

504

1

https://rito15.github.io/posts/cs-switch-case-vs-dictionary/
이 내용을 보면 딕셔너리를 이용하는것보다 스위치문을 이용하는게 더 효율적인것으로 보이는데, 어떤것이 맞는지 모르겠어요

답변 2

1

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

데이터가 많아질 수록 Dictionary가 당연히 성능이 좋아집니다.
그리고 애당초 0번부터 1, 2, 3, 4, ... 이렇게 순차적으로 사용하는게 아니라면,
당연히 해시 기반의 Dictionary가 아주 많이 월등해집니다.

0

링크에 나와있는 설명 중에 switch-case가 if-else if로 해석된다고 되어 있는데 실제로는 완전히 다릅니다. switch-case는 점프 테이블을 만들거나 다른 최적화 방법 등을 통해 해당 case문으로 한 번에 갑니다. 그리고 그 최적화가 컴파일 단계에서 수행되기 때문에 빠릅니다. if문은 true를 만날 때까지 모든 조건을 다 검사해야 돼요. 컴파일 최적화도 어렵고요.

case가 그렇게 많지 않으면 Dictionary를 안 써도 되겠지만 계속 기능이 확장될 여지가 있을 때는 유지보수성과 가독성을 생각해 Dictionary가 더 나은 선택이라고 생각합니다.

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

switch-case가 최적화 되는 경우는 case를 0, 1, 2... 이렇게 구멍없이(?) 할 경우이고
연속되지 않는 무작위의 숫자로 switch-case 하면 어쩔 수 없이 if else처럼 구현이 됩니다.
패킷 아이디 또한 연속되지 않으니, if else 노가다를 하게 됩니다.

설명할 때 언급했던 다른 최적화 방법이 이진 트리였는데요. 여전히 if-else로도 변환될 수 있나 보네요. 덕분에 한 번 더 찾아봤습니다. 숫자가 연속적이어야 점프 테이블로 최적화가 되는군요~

서태준님의 프로필 이미지
서태준

작성한 질문수

질문하기