프로그래밍/의문

코드 안에 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 매치 메이커를 별도 두면 깔끔하게 해결이 문제라는 알았다.

반응형