반응형
음악 데이터테이블이 있고 컬럼 중에 장르가 있다고 가정한다.
각 장르는 숫자로 구분한다.
0 = 롹
1 = 힙합
2 = 발라드
3 = 트로트
음악(music) | ||
노래 | 가수 | 장르 |
좋은 날 | 아이유 | 1 (힙합) |
Rocking tonight | 메탈리카 | 2 (발라드) |
불타오르네 | 방탄소년단 | 3 (트로트) |
뚜두뚜두 | 블랙핑크 | 0 (롹) |
우주를 줄게 | 볼빨간 사춘기 | 1 |
그건 아마 우리의 잘못은 아닐거야 | 백예린 | 2 |
좋니 | 윤종신 | 2 |
킬리만자로의 표범 | 조용필 | 3 |
서버에서 music이라는 이름으로 뷰단에 데이터가 넘어온다고 가정해보자
서버에서 뷰로 데이터를 뿌릴 때 서버사이드 렌더링이라면 표현언어를 사용하여 if문 속에 태그 내용을 써서 조건을 줄 수 있지만
타임리프
<th:if="${music.genre == 0}">
<div>롹</div>
</th:if>
<th:if="${music.genre == 1}">
<div>힙합</div>
</th:if>
<th:if="${music.genre == 2}">
<div>발라드</div>
</th:if>
<th:if="${music.genre == 3}">
<div>트로트</div>
</th:if>
JSTL
<c:choose>
<c:when test="${music.genre == 0}">
롹
</c:when>
<c:when test="${music.genre == 1}">
힙합
</c:when>
<c:when test="${music.genre == 2}">
발라드
</c:when>
<c:otherwise>
트로트
</c:otherwise>
</c:choose>
태그별로 감싸서 if 조건문을 써야해서 생산성이 떨어질 수 있다.
이미 페이지가 렌더 된 상태에서 AJAX 등을 이용하여 동적으로 데이터를 불러올 때에는
innerHTML 등으로 태그로 이루어진 문자열 안에 조건문을 넣지 못해 애매할 때가 있다.
var text =`
<choose>
<div>${music.genre}</div>
</choose>`
var text =`
<div th:if=${music.genre}>
</div>`
//이미 렌더를 끝낸 페이지에서 동적으로
//문자열 안에 if문이 들어가면 그대로 문자열로 인식하거나 작동하지 않을 때가 많다
백단에서 처리하고 보내려니 처리 시간 낭비인 것 같고 코드가 더러워진다.
이때 ${삼항 연산자}를 사용하면 if else는 물론 else if 까지 대체 할 수 있다.
if else 를 이용한다면
<th:if="${music.genre == 0}">
<div>롹</div>
</th:if>
<th:if="${music.genre == 1}">
<div>힙합</div>
</th:if>
<th:if="${music.genre == 2}">
<div>발라드</div>
</th:if>
<th:if="${music.genre == 3}">
<div>트로트</div>
</th:if>
요런 느낌이지만
삼항 연산자를 사용하면
<div th:if="${genre == 0 ? '롹' :
genre == 1 ? '힙합' :
genre == 2 ? '발라드' :
genre == 3 ? '트로트' :
null}">
</div>
동적으로 생성될 데이터 사용시는
$.ajax({
type : "POST",
url : "/music/ismylife",
data : params,
success : function(music){
var text =`
<div>
${music.genre == 0 ? "롹" :
music.genre == 1 ? "힙합" :
music.genre == 2 ? "발라드" :
music.genre == 3 ? "트로트" :
null}
</div>
}
});
하나의 태그 안에서 삼항연산자로 조건을 주면 깔끔하다.
늘 삼항 연산자는 조건? 참: 거짓
참거짓만 반영하는 줄 알았는데 조건?조건?참:거짓 :else
즉!!
삼항연산자에 참이 들어갈 곳에 계속 조건을 넣어주면 else if가 된다!
반응형
'JAVA > Spring' 카테고리의 다른 글
스프링 비밀번호 암호화/복호화? (0) | 2022.06.06 |
---|---|
DTO는 무수히 만들어질 수 있다. (0) | 2022.04.22 |
ClassCastException 에러 (0) | 2022.03.22 |
[Spring]DAOImpl 없애기 (2) | 2022.02.06 |
[Spring] Validator가 여러 개 일때 통합 Validator 만들기 (0) | 2022.01.23 |
Comment