프로그래밍/의문
코드 안에 if~else 구문이 많다는 건 다른 성격의 것들을 한 데에 모아놨다는 것이다.
제페
2015. 11. 14. 09:48
반응형
매치를 만드는 클래스가 있었다.
유저의 레이팅에 따라 매치를 만들어주는 그런 정도는 아닌, 특정 모드를 원하는 유저가 n명이 될 때 매치를 만들어주는 그런 클래스였다.
그런데 매치를 등록하는 부분이 뭔가 이상해져가는 ㅡㅡ; 느낌이 들었다.
다음은 그 문제의 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | switch (mode) { case soc::gamemode::v2: { v2users.push_back(info); if (v2users.size() == 4) { } } case soc::gamemode::v3: { v3users.push_back(info); if (v3users.size() == 6) { } break; } case soc::gamemode::v5: { v5users.push_back(info); if (v5users.size() == 10) { } break; } } | cs |
사실 매치 메이커의 각 매치 대기 리스트는 별도로 처리된다.
한 매치 메이커에서 2v2, 3v3, 5v5를 다 하려고 하다보니
매 연산마다 이게 2v2 처리를 해야하는 것인지, 3v3 처리를 해야하는 것인지.. 하는 코드가 들어갔다.
또 매치에서 등록을 취소하는 unregist 함수의 경우는 유저를 찾고자 할 때 2v2 대기자 목록에서도 찾고, 3v3 목록에서도 찾고, 5v5 목록에서도 찾는 ㅡㅡ; 아주 비효율적인 동작을 해야했다.
그래서 "이건 아주 옳지 않아 -_- 근본적으로 잘못 되어있어" 라는 생각이 들었는데
이 때 어떤 말이 생각났다 "코드 안에 if~else 구문이 많다는 건 다른 성격의 것들을 한 데에 모아놨다는 것이다."
그래서 어떻게 하면 좋을까~ 하고 잘 생각을 해보니
2v2 매치 메이커, 3v3 매치 메이커, 5v5 매치 메이커를 별도 두면 깔끔하게 해결이 될 문제라는 걸 알았다.
반응형