[Java] 자바 삼항연산자(Ternary) 알아보기 (중첩삼항연사자)

2021-01-28


오늘은 삼항 연산자라는 것을 알아보자. 이름에서 느껴지듯이 기존에 이항 연산자에서 항이 하나 더 추가된다고 생각하면 된다. (표현이 조금은 이상하지만...) 어렵지 않은 내용이니 바로 코드로 살펴보도록 하자.


package tTernary;

public class tTernary {

	public static void main(String[] args) {
		
		
		int a = 10;
		int b = 11;
		
		int c = a > b ? a : b;
		//c 값은 b의 값을 저장하게 된다.
		// 삼항 연사자의 코드를 풀이 하면
		// a의 값이 b보다 큰가 ? 크면은 a 이고 크지 않으면 b이다.
		// 이를 다시 한 번 작성해보면 아래와 같다.
		// a (관계연산) b ? true : false 정도로 표현할 수 있을 것 같다.
		
		System.out.println(c);
		
		//그런 다른 관계연산자를 넣었을때도 정상 동작하는지 알아보자.
		//결과를 쉽게 나타내기 위해 true / false 로 변경된 값을 주었다. 
		
		System.out.println(a > b ? true : false);
		System.out.println(a < b ? true : false);
		System.out.println(a >= b ? true : false);
		System.out.println(a <= b ? true : false);
		System.out.println(a == b ? true : false);
		System.out.println(a != b ? true : false);

		
		//이처럼 단순한 조건식 비교를 할 경우에는 if문을 활용할 수도 있지만
		//코드길이 측면에서 삼항 연산자를 통해서도 비교하는 것도 어는 정도 고려해 볼 수 있다.

	}
}

 

코드에서와 같이 int c = a > b ? a : b; 이 부분이 바로 삼항 연산자 코드이다. 크게 '?' 전후로 나누어지는데, 좌측(전)은 관계 연산자가 들어가게 된다. 코드에서는 'a' 가 'b' 보다 크다면, 이라고 해석한다. 다음 위치의 '?' 기호는 해당 관계가 true 인지 false인지 확인한 후 true 일 경우에는 ':' 기호 좌측의 값  'a' 를 리턴하고 false일 경우에는 ':' 기호 우측의 값 'b'를 리턴하게 된다. 결과적으로 변수 'c' 에는 'a'가 'b' 보다 작기 때문에 '?' 에서 false 임이 확인되고 ':' 의 우측 값 'b' 를 리턴하게 된다.

 

이후 'c' 를 출력해보면 11이라는 값이 저장된 것을 확인 할 수 있으며, 다양한 관계 연산자를 대입해 true / false의 값을 출력할 수 도 있다.

 


그러면 삼항연산자도 if 문처럼 중첩해서 사용할 수 있을까?? 라는 의문이 생길 수 있다.  -> 물론 가능하다. 다만 삼항 연사자의 경우 if 문보다는 한눈에 그 구조를 파악하기가 어렵기 때문에, 다중 조건문(if)을 사용할 경우에는 그냥 if문을 사용하는 것이 보는 사람 입장해서는 더 적합하다고 할 수 있다. 아래 코드를 살펴보자. (사람마다 조금의 차이는 있을 수 있다.)

package tTernary;

public class tTernary {

	public static void main(String[] args) {
		
		
		int a = 10;
		int b = 11;
		int c = 12;
		
		int max = a > b ? (a > c ? a : c) : (b > c ? b : c); 
		System.out.println("max - >  " + max);
		// 최댓값을 구하는 삼항 연산자
		
		int min = a > b ? (b < c ? b : c) : (a < c ? a : c); 
		System.out.println("max - >  " + min);
		// 최솟값을 구하는 삼항 연산자
	}
}

 

해당 코드는 3가지 int 형 변수를 선언해주고 이후 삼항 연산자를 통해서  max 값과 min값을 출력해 보는 코드이다. 코드와 같이 연산자 '?' 를 통해 나온 결과 true / false 값이 리턴됨에 따라 각 경우에 다시 수행해야 할 삼항 연산자를 다시 우측에 적어주는 방식으로 중첩 삼항 연산자를 사용할 수 있다. 

결과를 확인해 보면 위와 같이 선언된 3개의 변수 중 가장 큰 값인 12와 가장 작은 값인 10이 정상적으로 비교 저장된 후 출력되는 것을 확인할 수 있다.