개발자 과정 기록 및 일기

중앙정보기술인재개발원 개발자 과정 18일차 기록입니다.

킹갓왕동현 2024. 2. 23. 00:14

오늘은 기본기로 돌아가서, 삼항 연산자에 대해서 적어보겠습니다.

 

삼항 연산자는 간단하게 문법을 적어보면,

 

Boolean형태로 확인할 연산식 ? true면 대입할 변수값 : false면 대입할 변수값

 

입니다.

 

삼항 연산자는 얼핏 느끼기에

 

if(true or false){

   }else{ 

   };

 

흔히 사용하는 이 if else 문과 내용이 같아보입니다.

저도 그렇게 생각했고,

오늘 문제를 푸는데 마침 딱 if else 를 적용시킬만한 문제길래,

삼항연산자의 공식을 대입해봤습니다.

 

문제를 간략하게 설명하면 이랬습니다.

 

"문자열 str1안에 문자열 str2가 포함되면 1 출력, 포함되지 않으면 2 출력."

 

 

 

그리고 제가 적은 코드는,

 

Boolean result = str1.contains(str2);

 

result ? answer=1 : answer=2 ;

 

였습니다.

 

헌데,

java: unexpected type
  required: variable
  found:    value 

이라는 오류가 났고 ,

 

 

 

그 후에 다시 적은

 

Boolean result = str1.contains(str2);

 

if (result) { answer = 1 } else { answer = 2 };

 

이 코드는 오류가 나지 않고 정답처리가 됐습니다.

 

 

 

그 이유는,

삼항 연산자에서 첫번째 연산식은

true나 false가 성립하는 식이 따라와야합니다.

 

예를 들어,

Boolean i = false ? true : false ;

이건 당연히 작동됩니다. 그런데,

 

int i=0;

i == 0 ? 1 : 2 ;

이건 안됩니다.

 

단순히 생각하면

"i 는 0과 같다 ? 이게 true면 1 대입 : false 면 2 대입; "

이럴것 같습니다. 헌데 안되는 이유는,

 

문법이 잘못됐기 때문에 그렇습니다.

 

여기에 i가 원래 if-else 문에서

어떤 역할을 하는지를 보여드림으로써 이해를 돕겠습니다.

int a = 0;
int i;
if (a == 0) {
    i = 1;
} else {
    i = 2;
};

이것을 삼항 연산자 식으로 바꾸면,

int a=0;
int i = (a == 0) ? 1 : 2;

이렇게 됩니다.

 

그니까 여기서 i는 비교식이 아니라,

후에 나올 식에 대입하기 위한 변수입니다.

 

그리고 a가 Boolean 역할을 하는 것입니다.

 

그래서 저 삼항연산식을 말로 하면 이렇게 됩니다.

 

"a가 0이 맞으면 i에 1넣고, 아니면 2넣어"

 

아직도 이해가 안되실 분들이 있을까봐,

(참고로 저는 바로 이해가 안돼서

식을 여러번 고쳐보면서 이해했습니다.)

 

여기서 한 번 더 이해를 돕기 위해 색깔을 이용해보겠습니다.

 

int a = 0;

int i;

if (a == 0) { i = 1;

} else {

      i = 2; };

-----------------------------

int a = 0;

int i = (a == 0) ? 1 : 2 ;

 

색칠하고 보니 어지럽긴 한데,

잘 보시면, 같은 색끼리 같은 역할을 합니다.

 

그리고 위 식의 초록색i 가 아래엔 없는 이유는,

아래 삼항연산식에서는 빨간색 i가

동시에 초록색 i의 역할도 하기 때문입니다.

 

마지막으로,

처음 틀렸던 삼항연산자를 올바르게 쓰면

코드가 이렇게 됩니다.

 boolean result = str1.contains(str2);
    int answer = result ? 1 : 2;

 

 

아무쪼록 이해가 되셨길 바라고,

이해가 안되셨거나 틀린 부분이 보이면,

꼭 알려주시면 다시 잘 설명해보겠습니다!