주인장의 프로그래밍 개발 공부방

[Chapter 2 연산자] 8. 3항(삼항) 연산자 본문

프로그래밍 기본 지식/Chapter 2 연산자

[Chapter 2 연산자] 8. 3항(삼항) 연산자

거신 2019. 5. 23. 00:18

지금까지 2항 연산자, 단항 연산자 등 다양한 연산자들을 알아보고 있다.

대체로 수학시간에 배웠던 기호들이 많기 때문에

그리 어렵지는 않을 것이라 예상한다.

그런데 오늘 만나는 녀석은 솔직히 작성자도 처음 만나는 녀석이다.

이런 연산자가 있었나?하는 연산자이니

한 번 잘 보고 이해해보자.

의외로 꽤나 유용한 녀석이니 알아두면 도움이 될 것이다.

 

목표 : 3항(삼항) 연산자의 구조를 알 수 있고 직접 사용할 수 있다.

 

1. 3항 연산자

 

우리가 단항 연산자는 피연산자가 1개, 2항 연산자는 피연산자가 2개라는 것을

이미 앞에서 배웠었다.

그렇다면 3항 연산자피연산자가 3개라는 뜻인데

이런 기호는 난생 처음 본다.

도대체 어떻게 생긴 녀석일까?

 

(조건식) ? 식1(결과1) : 식2(결과2)

 

이러한 형태를 띄는 녀석인데 정말 신기하게 생겼다.

일단 차근차근 하나씩 뜯어보자.

 

3항 연산자의 맨 앞에는 조건식이 나오는데

조건식이란 연산의 결과가 참(true) 또는 거짓(false)이 나오는 식을 말한다.

예를 들면 우리가 이전에도 많이 봤었던

 

i == j;

 

등과 같이 비교 연산자

 

a > 3 && a < 6;

 

과 같이 논리 연산자를 사용한 식을 말한다.

이 식들은 전부 결과가 참(true) 또는 거짓(false)으로 나오는건 이미 다 알고 있는 사실이다.

 

맨 앞에는 조건식이 나오고 그리고 ?가 나온다.

굉장히 뜬금없이 등장했는데 일단 쓰라고하니 쓰자.

그리고 다음 나오는 것은 바로 식(또는 결과)가 등장한다.

총 2개의 식이 연산자에 들어가게 되는데 :(콜론)을 기준으로

좌, 우로 하나씩 들어가게 된다.

 

이 식들의 의미는 바로 참과 거짓을 의미한다.

다시 말해, :(콜론)을 기준으로

?앞의 조건식이 참(true)이면 식1을 출력하고

?앞의 조건식이 거짓(false)이면 식2를 출력한다는 뜻이다.

 

2. 3항 연산자의 형태

 

글로만 적으니 전혀 이해가 되질 않는다.

그러니 우리는 항상 그래왔듯이 예시를 보면서 알아보도록 하자.

먼저 3항 연산자의 틀을 다시 보자면

 

(조건식) ? 식1(결과1) : 식2(결과2)

 

가 된다가 앞에서 먼저 알아봤다.

그렇다면 직접 조건식과 식들을 넣어서 실제로 어떻게 사용하는지 한 번 보자.

 

예시)

(a > 5 && a < 12) ? "정답" : "오답";

 

이런 예시가 있다고 한다면 앞서 우리가 알아본 내용으로는

맨 앞에 있는 (a > 5 && a < 12)의 결과에 따라서

"정답"이 출력되거나 "오답"이 출력된다고 배웠었다.

 

맨 앞에 있는 (a > 5 && a < 7)조건식으로

이 식의 결과는 무조건 참(true) 또는 거짓(false)으로만 나온다는 걸 알고 있어야 한다.

앞으로 조건식과 조건값에 대해서도 알아볼텐데

사실 결과가 어떻게 출력되느냐에 따라서 달라지는 것이지

특별히 다른 것은 없다고 생각하면 되겠다.

 

다시 본론으로 돌아와서 맨 앞에 있는 조건식

다시 말해, (a > 5 && a <7)의 결과에 따라서 출력이 되는 것이 다르다고 했었다.

그렇다면 여기에 약간의 코드를 추가해서

실제로 프로그램이 동작하도록 만들어보면

 

int a = 4;

String str = (a > 5 && a < 7) ? "정답" : "오답";

 

이런 형태가 될 것이다.

여기에서 3항 연산자의 결과를 왜 String타입의 변수 str에 저장하는지 잘 모를 수 있을텐데

3항 연산자는 식1(결과1) 또는 식2(결과2)의 변수 타입에 맞게

값을 저장할 변수를 선언해줘야 한다.

그렇기 때문에 위의 예시와 다르게 결과를 "정답"과 "오답"이 아니라

정수형이라면 int str로 받아야하고

'A'나 '가'와 같이 결과를 출력한다면

char str로 받아줘야 오류가 발생하지 않는다.

그리고 이러한 이유때문에 식1(결과1)과 식2(결과2)는 무조건 동일한 타입이어야만 한다.

 

다시 본론으로 돌아와서

3항 연산자의 결과는 String타입의 str 변수에 저장될텐데

결과는 "정답"과 "오답" 중에 누가 출력이 될까?

변수 a에 4를 저장했기 때문에

a > 5이라는 조건이 거짓(false)이 되니까

(a > 5 && a < 7)이라는 조건식은 거짓이 된다.

(이해가 잘 안된다면 비교 연산자 부분과 논리 연산자 부분을 다시 읽어보자)

따라서 결과가 거짓이라면 :(콜론) 부분의 오른쪽에 있는 식2(결과2)

변수 str에 저장이 될 것이고

str을 출력해보면 "오답"이라고 정확하게 출력이 될 것이다.

만약 여기에서

변수 a에 4가 아니라 6을 넣는다면?

 

int a = 6;

String str = (a > 5 && a < 7) ? "정답" : "오답";

 

이렇게 되면 조건식 a > 5와 a < 7가 모두 참이 되기 때문에

조건식의 결과는 참이 되고 :(콜론)왼쪽에 있는 "정답"이 str에 저장이 될 것이다.

이렇게 조건식의 결과에 따라서 해당하는 결과가 나온다는 것을 알 수 있다.

 

이 내용은 조금 복잡해 보일지는 모르겠지만 생각해보면 꽤나 간단한 내용이라고 생각한다.

그리고 이 3항 연산자는 다음에 배울 조건문과도 연관성이 있기 때문에

알아놓으면 도움이 되는 지식이라고 생각한다.

 

3. 마무리

 

3항 연산자피연산자가 3개인 연산자라고 할 수 있다.

(조건식) ? 식1(결과1) : 식2(결과2)

의 형태를 하고 있으며 조건식의 결과에 따라서 출력되는 결과도 달라진다.

그리고 출력될 결과의 타입에 따라서 저장할 타입이 달라지니 잊지말고 꼭 기억하자.

조건식의 결과가 참(true)이라면

식1(결과1)의 내용을 그대로 출력하고

조건식의 결과가 거짓(false)이라면

식2(결과2)의 내용을 그대로 출력한다.

Comments