오늘은 기본기로 돌아가서, 삼항 연산자에 대해서 적어보겠습니다.
삼항 연산자는 간단하게 문법을 적어보면,
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;
아무쪼록 이해가 되셨길 바라고,
이해가 안되셨거나 틀린 부분이 보이면,
꼭 알려주시면 다시 잘 설명해보겠습니다!
'개발자 과정 기록 및 일기' 카테고리의 다른 글
오늘의 기록입니다. (1) | 2024.02.25 |
---|---|
중앙정보기술인재개발원 개발자 과정 19일차 기록입니다. (0) | 2024.02.23 |
중앙정보기술인재개발원 개발자 과정 17일차 기록입니다. (0) | 2024.02.21 |
중앙정보기술인재개발원 개발자 과정 16일차 기록입니다. (0) | 2024.02.20 |
중앙정보기술인재개발원 개발자 과정 15일차 기록입니다. (0) | 2024.02.20 |