조건 연산자란?
조건 연산자는 C 계열 언어(C/C++, Java, C# 등)에서 사용되는 삼항 연산자(ternary operator)를 의미하며, 다음과 같은 문법 형식을 가집니다:
<식1> ? <식2> : <식3>
식1은 불린(boolean) 표현식으로, 그 값이 참이면 식2를 반환하고 거짓이면 식3을 반환합니다.
대부분의 언어에서 조건 연산자는 우결합성(right-associative)을 가지지만 PHP에서는 좌결합성(left-associative)을 가집니다. 중첩 사용 시 이 점에 주의해야 합니다.
조건 연산자의 일반적인 사용 사례
조건 연산자는 주로 다음 두 가지 상황에서 사용됩니다:
- 초기화(initialization)
// C++
const std::string result = flag ? "success" : "failure";
// Java
final String result = flag ? "success" : "failure";
// Swift
let result: String = flag ? "success" : "failure";
- 상황 선택(case selectors)
// 첫 글자에 따른 교통수단 선택
transport = mode == 'S' ? ship :
mode == 'T' ? train :
mode == 'A' ? airplane :
mode == 'C' ? car :
mode == 'B' ? bicycle :
walking;
// 윤년 여부 판별
leapYear =
year % 400 == 0 ? true :
year % 100 == 0 ? false :
year % 4 == 0 ? true : false;
조건 연산자와 if 문의 비교
조건 연산자는 주로 if 문을 대체하여 조건부 계산과 할당에 사용됩니다. 두 가지의 주요 차이점은 조건 연산자가 표현식(expression)인 반면 if 문은 문(statement)이라는 점입니다.
조건 연산자의 특징:
- 표현식이며 선언형 프로그래밍 스타일을 가집니다.
- 주로 계산에 사용되며 부작용(side effect)을 덜 일으킵니다.
- 조건이 참일 때와 거짓일 때의 값을 모두 제공해야 합니다.
- 값을 직접 반환하거나 변수에 할당할 수 있습니다.
- 할당 시 변수 선언과 할당을 동시에 수행할 수 있습니다.
- 읽기 전용(final/const) 변수에 할당할 수 있습니다.
- 코드가 간결하지만(1줄) 디버깅 시 중단점 설정이 불가능합니다.
- 기호를 사용하여 의미를 표현하므로 if 문보다 가독성이 다소 낮습니다.
if 문의 특징:
- 문이며 명령형 프로그래밍 스타일을 가집니다.
- 계산뿐만 아니라 부작용을 일으키는 데에도 사용됩니다.
- 조건이 참일 때와 거짓일 때의 값을 강제로 계산하지 않습니다.
- 값을 직접 반환할 수 없으며, 임시 변수에 저장해야 합니다.
- 할당 시 변수 선언과 할당을 분리해야 합니다.
- 읽기 전용 변수에 할당할 수 없습니다.
- 코드가 길지만(5-9줄) 디버깅 시 중단점 설정이 가능합니다.
- 키워드(if, else)를 사용하여 의미를 표현하므로 조건 연산자보다 가독성이 높습니다.
조건 연산자 사용의 이유
기술적 이유:
- 변수 선언과 할당을 동시에 수행할 수 있습니다.
- 임시 변수 사용을 줄일 수 있습니다.
- 중복 코드를 제거할 수 있습니다.
- 불필요한 들여쓰기와 코드 블록을 줄일 수 있습니다.
비기술적 이유:
- 세련됨(sophisticated): 조건 연산자를 사용한 코드가 더 세련되어 보입니다.
- 지능적(intelligent): 조건 연산자를 사용하는 프로그래머가 더 지능적으로 보입니다.