Java 삼항연산자에서 후위 증감 연산자는 사용하면 안된다.(tmi. equals에 대해)
삼항연산자란?
기존 if else문을 쓰는거를 한 줄로 보기 편하게 쓸 때 사용한다.
규칙은 (조건문) ? 참 : 거짓 이 된다.
삼항연산자로는 if elseif else도 작성이 가능한데
조건문 ? 참 : 조건문 ? 참 : 거짓
으로 작성할 수 있다.
다만 더 가독성을 떨어트리기 때문에 권장하진 않는다.
if문에서 삼항연산자를 썼다고 속도가 다른건 아니기 때문에 뭐가 더 효율이 좋다보단 가독성을 생각해서 알맞게 사용하면 된다.
본론으로 들어가서 이런 if문이 있다고 하자
String str = "test";
int i = 0;
if("test".equals(str)){
i = 0;
}
else{
i++;
}
이렇게 if문을 작성할 거를
int i = "test".equals(str) ? 0 : i++;
한 줄로 작성을 하게 할 수 있다.
이렇게 된 경우 삼항연산자의 i 값은 0일까? 1일까?
정답은 0이다.
후위 증감 연산자는 할당 이후의 연산을 하기 때문에
i에 0 값을 주고 나중에 ++을 진행하지만 이미 i에게는 0이란 값으로 저장을 하고 나와 의미가 없어진다.
당연히 이럴 때는 전위 증감 연산자를 사용해주면 문제가 되진 않는다.
개인적으로 정보처리기사나 산업기사 실기에 이런 문제 나올만 하지 않나 싶다.
tmi. equals에 대해
본론과 전혀 다른 얘기인데 equals를 사용할 때 보통
String str = "test";
if(str.equals("test")) 이런식으로 자주 쓴다.
다만 str의 값이 지금은 "test"라는 값을 줬지만 DB에서 값을 받아오는 경우 null 데이터를 받아올 수도 있다.
str 변수에 null값이 들어왔다면
null을 갖고 비교한다해서 NullPointerException 을 때려줄 것이다
이런 에러를 방지하기 위해
"test".equals(str) 글자를 먼저 앞에 작성해주면 글자를 먼저 갖고 비교하기 때문에 에러를 피할 수 있다.