-
코드 안에 if~else 구문이 많다는 건 다른 성격의 것들을 한 데에 모아놨다는 것이다.프로그래밍/의문 2015. 11. 14. 09:48반응형
매치를 만드는 클래스가 있었다.
유저의 레이팅에 따라 매치를 만들어주는 그런 정도는 아닌, 특정 모드를 원하는 유저가 n명이 될 때 매치를 만들어주는 그런 클래스였다.
그런데 매치를 등록하는 부분이 뭔가 이상해져가는 ㅡㅡ; 느낌이 들었다.
다음은 그 문제의 코드이다.
1234567891011121314151617181920212223242526switch (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 매치 메이커를 별도 두면 깔끔하게 해결이 될 문제라는 걸 알았다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
iocp 송신 관련 주의점 (0) 2016.01.26 strand로 동기화를 하려는데, 문제가 있다. (2) 2015.12.01 간결하고 깨끗한 코드 vs 높은 성능 (0) 2015.11.11 ODBC BindParametert 사용 시 문자열의 길이로는 SQL_NTS를 넣어줘야 한다. (0) 2015.10.28 VS NuGet으로 라이브러리가 설치되지 않았던 문제 (0) 2015.08.23