규도자 개발 블로그

좋은 변수이름 정하기 : 불린 변수 이름 본문

소프트웨어 공학/Clean Code

좋은 변수이름 정하기 : 불린 변수 이름

규도자 (gyudoza) 2018. 10. 12. 01:55

전의 게시물에서도 밝혔다시피 이 게시물은 스티브 맥코넬이 쓴 CODE COMPLETE2에 나온 내용이며 다른 사람들에게도 변수 이름의 중요성과 그 이름을 정하는 데 도움을 주기 위해, 그리고 나 자신도 필요할 때마다 참고하기 위해 쓴다는 것을 알린다.

불린 변수 이름

전형적인 불린 변수의 이름을 기억한다. 다음은 전형적으로 유용하게 사용되는 변수의 이름이다.


  • done : 무언가 수행되었다는 것을 가리키기 위해서 done을 사용한다. 이 변수는 반복문이 수행되었거나 다른 연산이 수행되었음을 가리킬 수 있다. 무언가가 처리되기 전에 done을 거짓으로 설정하고 완료되고 난 후 참으로 설정한다.
  • error : 오류가 발생했음을 가리키기 위해서 error를 사용한다. 오류가 발생했을 때 이 변수를 참으로 설정하고 오류가 발생하지 않았을 때 거짓으로 설정한다.
  • found : 값이 발견되었다는 것을 가리키기 위해서 found를 사용한다. 값이 발견되지 않았을 때 거짓으로 설정하고 값이 발견되었을 때 참으로 설정한다. 배열에서 값을 검색하거나 파일에서 직원 ID를 검색하거나 수표 목록에서 특정한 수표 금액을 검색할 때 found를 사용한다.
  • success 또는 ok : 연산이 성공적인지를 가리키기 위해서 success 또는 ok를 사용한다. 연산이 실패했을 때 이 변수를 거짓으로 설정하고 연산이 성공했을 때 참으로 설정한다. 가능하다면 success는 성공했다는 것을 좀 더 정확하게 설명하는 구체적인 이름으로 대체한다. 예를 들어 처리가 완료되어야 프로그램이 성공한 것이라면 processingComplete를 대신 사용한다. 값을 구했을 때 프로그램이 성공한 것이라면 found를 대신 사용한다.

참이나 거짓의 의미를 함축하는 불린 변수의 이름을 사용한다. done과 success와 같은 이름은 상태가 참 아니면 거짓, 또는 무언가가 수행되었거나 수행되지 않았거나 둘 중 하나이기 때문에 좋은 불린 변수 이름이다. 반면에 status와 sourceFile과 같은 변수는 참이나 거짓이 명백하지 않기 때문에 좋지 못한 불린 이름이다. status가 참이면 무엇을 의미하는가? 무언가가 상태를 갖고 있다는 것을 의미하는가? 거짓은 아무것도 잘못된 것이 없다는 의미인가? status와 같은 이름으로는 아무것도 말해줄 수 없다.

 좀 더 나은 결과를 위해서 status를 error나 statusOK와 같은 이름으로 대체하거나 sourceFile을 sourceFileAvailable이나 sourceFileFound와 같은 다른 변수로 대체한다.

 어떤 개발자들은 불린 변수 이름 앞에 Is를 입력하는 것을 좋아한다. 그렇게 하면 변수의 이름이 의문사가 된다. isDone? isError? isFound? isProcessingComplete? 이 질문에 대한 참이나 거짓의 대답이 이 변수의 값을 제공한다. 이러한 접근 방법의 이점은 그것이 모호한 이름에는 어울리지 않는다는 점이다. isStatus?는 말이 안 되는 이름이다. 이 접근 방법의 단점은 간단한 논리 표현식에서 가독성이 떨어진다는 것이다. if (isFound)는 if (found)보다 가독성이 약간 떨어진다.

긍정적인 불린 변수 이름을 사용한다. notFound, notDone, notSuccessful과 같은 부정적인 이름은 이 변수의 값이 부정이 되었을 때 읽기가 어려워진다. 다음 코드를 살펴보자.

if not notFound

이런 이름은 found나 done, processingComplete으로 대체하고 나서 적절한 연산자로 부정해야 한다. 찾고 있는 것을 찾았다면 not notFound대신 found를 사용한다.

Comments