• 분류 전체보기 (9)
    • Study (7)
      • CPP (4)
      • DataStructure (2)
      • Algorithm (0)
      • 기타 개발 팁 (1)
    • Diary (1)

블로그 메뉴

  • 홈
  • CPP
  • DataSturcture
  • Algorithm

공지사항

인기 글

태그

  • C++
  • IT
  • 프로그래밍 #windows #배치파일 #윈도우 #windows #batch #command
  • CPP
  • CS
  • 컴퓨터
  • Queue

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
fredhur

fredhur's Tech Blog

Diary

변수는 한번에 딱 한번만. 바꿔치기는 그만..

2023. 3. 12. 21:43

프로그래밍을 하다보면 조건에 따라 변수가 바뀌는 경우가 있다. 이런 경우를 코딩 할때 아래 두가지 방식으로 코딩을 주로 할 것 같다.

// 예시 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 로 만든후에 딱 한번으로 결정하자.

 

 

 

 

 

 

저작자표시 (새창열림)
    fredhur
    fredhur

    티스토리툴바