📚 PHP 초급 - 3주차 - 02 조건 연산자 (삼항 연산자 ?:): 간결하게 조건 처리하기

2025. 6. 27. 02:10프로그램/PHP 초급

📚 PHP 초급 - 3주차 - 02 조건 연산자 (삼항 연산자 ?:): 간결하게 조건 처리하기

📚 PHP 초급 - 3주차 - 02 조건 연산자 (삼항 연산자 ?:): 간결하게 조건 처리하기

PHP에서 #조건문 (if-else)은 특정 조건의 #참_거짓 여부에 따라 코드의 실행 흐름을 제어하는 중요한 구문입니다. 하지만 간단한 조건에 따라 두 가지 값 중 하나를 선택해야 하는 경우, 더 간결하게 표현할 수 있는 방법이 있는데, 바로 **#조건_연산자 (Conditional Operator)** 또는 **#삼항_연산자 (Ternary Operator)**입니다. 이번 포스팅에서는 PHP의 #삼항_연산자 ?:의 사용법과 장단점에 대해 자세히 알아보겠습니다.


1. #삼항_연산자 란?

#삼항_연산자 는 세 개의 피연산자를 사용하여 조건을 평가하고, 조건이 #참 이면 첫 번째 표현식의 결과를 반환하고, 조건이 #거짓 이면 두 번째 표현식의 결과를 반환하는 #연산자 입니다. if-else 구문의 간결한 축약형이라고 생각할 수 있습니다.

기본 형태:

조건 ? 참일 때의 표현식 : 거짓일 때의 표현식;


2. #삼항_연산자 사용 예시

다음은 #삼항_연산자 를 사용하여 간단한 조건을 처리하는 예시입니다.

예시 1: 성인 여부 확인

$age = 20; $status = ($age >= 18) ? "성인" : "미성년자"; echo "나이: " . $age . "세, 상태: " . $status; // 출력: 나이: 20세, 상태: 성인

위 코드에서 $age >= 18이라는 조건이 평가됩니다. 조건이 #참 (true)이므로 ? 뒤의 "성인"이 $status #변수 에 #할당 됩니다. 만약 $age가 17이었다면 조건은 #거짓 (false)이 되고, : 뒤의 "미성년자"가 $status에 #할당 될 것입니다.

예시 2: 점수에 따른 합격/불합격 판정

$score = 75; $result = ($score >= 60) ? "합격" : "불합격"; echo "점수: " . $score . "점, 결과: " . $result; // 출력: 점수: 75점, 결과: 합격


3. #삼항_연산자 의 장점과 단점

장점:

  • #간결한_코드: if-else 구문에 비해 코드를 훨씬 더 간결하게 작성할 수 있습니다. 특히 간단한 조건 분기에 유용합니다.
  • #가독성_향상 (경우에 따라): 간단한 조건에서는 코드를 한눈에 파악하기 쉽게 만들어 가독성을 높일 수 있습니다.
  • #표현식_내에서_사용_가능: #삼항_연산자 는 값을 반환하므로, 다른 #표현식 내에서 직접 사용할 수 있습니다.echo "결과: " . (($score >= 60) ? "Pass" : "Fail");
  • 예시:

단점:

  • #가독성_저하 (복잡한 조건): 조건이 복잡해지거나 중첩될 경우, #삼항_연산자 를 과도하게 사용하면 코드의 가독성이 오히려 떨어질 수 있습니다.
  • #디버깅_어려움: 복잡하게 중첩된 #삼항_연산자 는 디버깅을 어렵게 만들 수 있습니다. 각 조건과 결과를 추적하기가 쉽지 않습니다.
  • #제한적인_기능: if-elseif-else 와 같이 여러 개의 조건을 처리하거나, 조건에 따라 여러 줄의 코드를 실행해야 하는 경우에는 #삼항_연산자 를 사용하기 어렵습니다.

4. #삼항_연산자 중첩 사용 시 주의사항

#삼항_연산자 는 중첩하여 사용할 수도 있지만, 코드의 가독성을 심각하게 저하시키므로 가능한 한 피하는 것이 좋습니다.

예시 (가독성이 떨어지는 중첩 사용):

$level = 2; $message = ($level === 1) ? "초급" : (($level === 2) ? "중급" : (($level === 3) ? "고급" : "알 수 없음")); echo "레벨: " . $level . ", 메시지: " . $message; // 출력: 레벨: 2, 메시지: 중급

위 예시처럼 #삼항_연산자 를 여러 번 중첩하면 코드를 이해하기 매우 어려워집니다. 이러한 경우에는 if-elseif-else 구문을 사용하는 것이 훨씬 더 명확하고 유지보수하기 쉽습니다.


5. PHP 7의 #널_병합_연산자 (??)

PHP 7부터는 #널_병합_연산자 (??)가 도입되어, #변수 가 설정되어 있는지 또는 #NULL 인지를 더 간결하게 확인할 수 있습니다. 이는 #삼항_연산자 의 축약형으로 볼 수 있습니다.

 

기본 형태:

$result = $variable ?? "기본값";

위 코드는 $variable이 설정되어 있고 #NULL 이 아니면 $variable의 값을 $result에 #할당 하고, 그렇지 않으면 "기본값"을 #할당 합니다. 이는 다음과 같은 #삼항_연산자 표현과 동일합니다.

$result = isset($variable) ? $variable : "기본값";

#널_병합_연산자 는 특히 #배열 이나 #객체 의 속성에 접근할 때 유용하게 사용될 수 있습니다.

 

예시:

$user = ["name" => "Alice"]; $userName = $user["name"] ?? "Guest"; // $user["name"]이 있으면 그 값, 없으면 "Guest" $userAge = $user["age"] ?? 0; // $user["age"]이 있으면 그 값, 없으면 0

echo "사용자 이름: " . $userName . "<br>"; // 출력: 사용자 이름: Alice echo "사용자 나이: " . $userAge; // 출력: 사용자 나이: 0


결론

#삼항_연산자 는 간단한 조건에 따라 값을 선택해야 하는 경우 코드를 간결하게 만들어주는 유용한 #연산자 입니다. 하지만 복잡한 조건이나 중첩된 사용은 코드의 가독성을 저하시키므로 적절한 상황에 제한적으로 사용하는 것이 좋습니다. PHP 7에 도입된 #널_병합_연산자 (??)는 #변수 의 존재 여부나 #NULL 여부를 간결하게 처리하는 데 매우 유용하므로 함께 알아두시면 좋습니다. 상황에 따라 적절한 #조건문 또는 #조건_연산자 를 선택하여 효율적이고 가독성 높은 코드를 작성하는 것이 중요합니다.