# 삼항 연산자 (Ternary Operator)
---
## 1. 개요
### 1.1 삼항 연산자란?
삼항 연산자(Ternary Operator)는 ****조건에 따라 값을 선택****하는 Java의 축약 표현식이다. 일반적인 `if-else` 구문보다 간결하게 작성할 수 있으며, ****값을 반환****하는 표현식으로 활용된다.
```
int max = (a > b) ? a : b;
```
- 첫 번째 피연산자: 조건 (boolean 결과)
- 두 번째 피연산자: 조건이 참일 때 반환 값
- 세 번째 피연산자: 조건이 거짓일 때 반환 값
### 1.2 사용 목적
- UI 메시지 처리: 상황에 따라 메시지 문구 설정
- 값 분기 처리: 조건에 따라 상수/계산식 결정
- 간단한 로직 처리에서 ****코드 길이 절감****
---
## 2. 문법
```
조건식 ? 참일 때의 값 : 거짓일 때의 값;
```
### 2.1 예시
```
int age = 20;
String type = (age >= 18) ? "성인" : "미성년자"; // 출력: 성인
```
- `조건식`: `age >= 18` → true
- 참일 때: "성인"
- 거짓일 때: "미성년자"
---
## 3. 삼항 연산자 vs if-else
### 3.1 차이점
항목
| 삼항 연산자
| if-else 구문
|
---|
반환 가능 여부
| ✅ 값 반환 (표현식)
| ❌ 문(statement)
|
간결함
| ✅ 매우 간결
| ❌ 구조적으로 길어질 수 있음
|
가독성
| ✅ 단순 조건일 때만
| ✅ 복잡 조건/로직에 적합
|
### 3.2 비교 예시
```
// 삼항 연산자
int max = (a > b) ? a : b;
// 동일한 if-else
int max;
if (a > b) {
max = a;
} else {
max = b;
}
```
---
## 4. 중첩 삼항 연산자
### 4.1 기본 중첩 예제
```
int score = 85;
String grade = (score >= 90) ? "A" :
(score >= 80) ? "B" :
(score >= 70) ? "C" : "F";
System.out.println(grade); // 출력: B
```
### 4.2 주의사항
- 중첩이 많아질수록 ****가독성이 급격히 저하됨****
- 중첩보다는 `if-else` 또는 `switch`를 고려할 것
---
## 5. 실전 예제 모음
### 5.1 나이 판별
```
int age = 16;
String result = (age >= 18) ? "성인" : "미성년자";
System.out.println(result); // 출력: 미성년자
```
### 5.2 최대값 구하기
```
int a = 25, b = 17;
int max = (a > b) ? a : b;
System.out.println("최대값: " + max); // 출력: 25
```
### 5.3 짝수/홀수 판별
```
int num = 9;
String parity = (num % 2 == 0) ? "짝수" : "홀수";
System.out.println(parity); // 출력: 홀수
```
### 5.4 로그인 상태 메시지
```
boolean isLoggedIn = false;
String message = isLoggedIn ? "환영합니다!" : "로그인이 필요합니다.";
System.out.println(message); // 출력: 로그인이 필요합니다.
```
### 5.5 다중 조건 - 세금율 계산 예시
```
double income = 45000;
double taxRate = (income > 80000) ? 0.35 :
(income > 40000) ? 0.25 : 0.15;
System.out.println("세율: " + taxRate);
// 출력: 세율: 0.25
```
---
## ✅ 요약
특징
| 설명
|
장점
| 간결한 조건 처리, 변수 할당 가능
|
단점
| 복잡한 로직에는 가독성 저하
|
사용 추천
| UI 메시지, 단순 조건 분기, 코드 압축
|
사용 주의
| 중첩 사용은 피하고 if-else 대체로 제한
|
> 삼항 연산자는 ****작고 간단한 판단 로직****에 매우 유용하지만, ****가독성을 해치는 복잡한 분기****에는 적합하지 않다는 점을 기억하자.