본문 바로가기

Java/Java SE, EE

[Java/Java SE, EE] 삼항(?:) 연산자

삼항(?:) 연산자

삼항 연산자는 세 개의 피연산자를 사용하는 조건식에 해당합니다. 연산식의 과정은 일반 조건문에 사용되는 if 구문과 동일합니다. 삼항 연산자에서 조건식에 이어 나오는 ? A는 해당 조건문이 true이 경우에 대한 반환 값 A를 의미합니다. 그 다음 이어지는 : B는 조건문이 false인 경우에 대한 반환 값 B를 의미합니다.

구분 연산자 항의 개수 연산식 결과
조건 (조건식) ? A : B 삼항 조건식이 true인 경우 피연산자 A를 리턴, 그렇지 않은 경우 피연산자 B를 리턴

아래 예시는 if 구문과 삼항 연산자를 사용하고 있습니다. 두 구문의 연산 과정과 결과는 완전히 동일합니다.

int m = 0;
int x = 100;

/**
* if 구문을 사용하는 조건문
*/
if (0 < x) {
	m = 1;
} else {
	m = -1;
}
		
/**
* 삼항 연산자를 사용하는 조건문
*/
m = (0 < x) ? 1 : -1;		// 1

삼항 연산자를 사용했을 때의 특징은 다음과 같습니다. 이는 if 구문과 완전히 대비되는 특징입니다.

  • 인라인 조건문(Inline if)으로 불리며, 조건문을 한 줄로 처리하므로 코드가 더 간결해집니다.
  • 조건문의 반환 값(? A : B)을 특정 변수에 대입하거나 인자로 전달할 때 가독성이 좋습니다. 위의 예시 코드와 같이 조건문 결과에 따른 반환 값 A와 B가 동일한 변수에 대입되는 경우가 대표적입니다.
  • 조건문의 결과로 수행되는 코드가 복잡한 내용을 포함하는 경우 부적절하거나 사용 할 수 없습니다.
  • 삼항 연산자로 코드를 인라인으로 처리한다고 하더라도 수행 속도가 빨라지는 것은 아닙니다.
  • 삼항 연산자의 각 피연산자가 복잡한 구성을 지니는 경우 오히려 가독성이 떨어질 수 있습니다.

연쇄 삼항 연산자

삼항 연산자의 피연산자 A 또는 B에 또 다른 삼항 연산자 식을 추가하여 연쇄 처리 할 수 있습니다. 이 역시 간단한 조건문에 대해서 연쇄 처리해야 하는 경우 가독성이 높아지는 장점이 있습니다. 아래 예시는 if 구문과 삼항 연산자를 사용하여 동일한 연산 과정을 처리하는 코드입니다.

int m = 0;
int x = 100;

/**
 * if 구문을 사용하는 조건문
 */
if (0 < x) {
   m = 1;
} else if (0 == x) {
   m = 0;
} else {
   m = -1;
}

/**
 * 삼항 연산자를 사용하는 조건문
 */
m = (0 < x) ? 1 : (0 == x) ? 0 : -1;      // 1