프로그래밍을 하다보면 조건에 따라 변수가 바뀌는 경우가 있다. 이런 경우를 코딩 할때 아래 두가지 방식으로 코딩을 주로 할 것 같다.
// 예시 1
#include <cstdio>
int main()
{
char *str;
bool isGo = true;
if(isGo)
{
str = "GO";
}
else
{
str = "STOP";
}
return 0;
}
// 예시 2
#include <cstdio>
int main()
{
char *str = "STOP"
bool isGo = true;
if(isGo)
{
a = "GO";
}
return 0;
}
둘의 동작상 차이는 거의 없다. 변수 str 을 조건에 따라서 어떤 문자열로 할지 정해주는 아주 단순한 프로그램이다.
둘이 기능상 차이가 없다면 뭐가 더 좋은 코드일까? 의견은 많이 갈릴 문제이다. 누군가는 둘다 별차이 없으면 그냥 대충 해도 된다고 할것이다. 그러나 조금 더 경험이 많은 엔지니어라면, 예시1 을 선호할 것 같다.
그 이유로는 예시 2 처럼 프로그래밍을 하다보면 a 가 뒤에서 또 어떤 로직으로 바뀔지 예상을 할 수 없기 때문이다. 앞서 말했듯 프로그래밍은 여러 사람이 하기 때문에, 나중에 다른 사람이 프로그래밍을 하다 보면 예시 2 같은 코드를 보면 이 변수 a 는 나중에 뒤에서 if 로 또 바꾸어도 되지 않을까 라고 생각을 하게 된다.
그렇게 되면 a 는 나중에 값을 추적하거나 어떤 조건으로 변하는지 파악이 힘들어 진다.
그래서 특별한 경우가 아니라면 예시 1 같은 코드를 선호할것이다. 이것은 글쓴이의 개인적 경험이기도 하다.
위 예시로는 와닿지 않을 것 같은데 고객이 아래와 같은 조건을 추가 하였다고 하자.
"isGo 라는 신호에 하나 더 추가를 하죠. isGoLeft 라는 조건이 들어갔는데 위 신호가 true 가 되면 isGoLeft 로 나오도록 해주세요. "
"isGoRight 도 추가합시다."
이런 요구 조건을 받는다면 예시 1 과 같은 경우에는 여기에 else if 로 구현을 할 수 있겠지만, 예시 2 처럼 되어있는 경우 계속적으로 if 문을 추가하여 구성할 것이다.
그렇게 되면 예시 2는 코드가 길어지며 변수의 값 추적이 힘들어진다.
결론
제발 변수의 결정은 단 한번에 끝내자. 내부 로직이 복잡하다면 함수나 class 로 만든후에 딱 한번으로 결정하자.