15장 - 조건문 사용

Edited by / 임수형 (sulogc)

조건문은 다른 명령문의 실행을 제어하는 명령문이다. 명령문이 분기 된다.

15-1 if 문

if-then 명령문

다음 가이드라인을 따른다.

  • 일반적인 경우를 처리하는 코드를 먼저 작성한 다음 특별한 경우를 처리하라.
  • 동치에 대해서 정확하게 이동 경로를 결정하다.
  • 정상적인 경우를 else가 아니라 if 문 다음에 입력하라

  • if 문 다음에 의미 있는 명령문을 작성하라
  • else 절을 고려하라 else절이 필요하지 않는 경우, 주석을 통해 설명한다.
  • 정확성 파악을 위해 else 문을 테스트하라.
  • if와 else문의 반대 결과를 검사하라.

연속적인 if-then-else 문

case문을 지원하지 않는 경우 if-then-else 테스트를 연속해서 작성하게 된다. 다음과 같은 가이드라인을 고려한다.

  • 복잡한 테스트를 불린 함수 호출로 단순화하라.
    if ( inputCharacter < SPACE ) {
     characterType = CharacterType_ControlCharacter;
    }
    else if (
     inputCharacter == ' ' ||
     inputCharacter == ',' ||
     inputCharacter == '.' ||
     inputCharacter == '!' ||
     inputCharacter == '(' ||
     inputCharacter == ')' ||
    inputCharacter == ':' ||
     inputCharacter == ';' ||
     inputCharacter == '?' ||
     inputCharacter == '-'
     ) {
     characterType = CharacterType_Punctuation;
    }
    else if ( '0' <= inputCharacter && inputCharacter <= '9' ) {
     characterType = CharacterType_Digit;
    }
    else if (
     ( 'a' <= inputCharacter && inputCharacter <= 'z' ) ||
     ( 'A' <= inputCharacter && inputCharacter <= 'Z' )
     ) {
     characterType = CharacterType_Letter;
    }
    
if ( IsControl( inputCharacter ) ) {
 characterType = CharacterType_ControlCharacter;
}
else if ( IsPunctuation( inputCharacter ) ) {
 characterType = CharacterType_Punctuation;
}
else if ( IsDigit( inputCharacter ) ) {
 characterType = CharacterType_Digit;
}
else if ( IsLetter( inputCharacter ) ) {
 characterType = CharacterType_Letter;
}
  • 가장 흔한 경우를 앞에 놓아라.
  • 모든 경우를 다루었는지 확인하라.

15-2 case 문

case나 switch문은 언어에 따라 매우 다르게 구현된다. 다음 가이드라인을 따른다.

가장 효과적인 case 순서의 선택

선택 사항이 적은 경우 순서가 중요하지 않지만, 이벤트 기반 프로그램에서 수십 개의 이벤트를 처리하는 긴 case 문이 있다면 그 경우에는 순서가 중요하다.

  • 알파벳 순이나 숫자 순으로 case를 나열하라
  • 가장 정상적인 경우를 앞에 놓아라 (정상/비정상)
  • 빈도에 따라서 case를 나열하라 (흔한 경우 파악 용이)

case 문 사용 팁

  • case 문이 하는 일을 간단하게 유지한다. 각 case 다음에 오는 코드가 짧으면 case 문의 구조를 명확하게 하는 데 도움을 준다.
  • case 문에서 사용하기 위해서 가짜 변수를 만들지 않는다.
  • 유효한 기본값을 찾고자 하는 경우에만 default 문을 사용한다.
  • 오류를 검출하기 위해서 default 절을 사용한다.