[서블릿/JSP] 표현언어(EL)에서 ${}과 #{} 표기법의 차이
이전글
\[서블릿/JSP\] 표현 언어(EL) 기본 사용법 및 자료형 설명
표현언어(EL)에서 ${}과 #{} 표기법의 차이
표현언어(Expression Language)에는 ${}와 #{} 두가지 표기법이 있습니다. #{}표기법의 경우 JSP 2.1 버전에 추가된것으로 JSF(Java Server Faces)에서 사용됩니다.
${}의 경우 해석되는 즉시 해당 표현식의 값이 반영되므로 즉시 적용(immediate expression)이라 하며, #{}의 경우 해당 값이 쓰일때 해당 값이 적용되므로 지연 적용(deferred expression)이라 합니다.
이 차이를 알아보기 위해 다음의 예제를 참고해 보도록 하겠습니다. GIT 링크
<%
MemberBean m = new MemberBean();
m.setName("dololak");
pageContext.setAttribute("mem", m);
%>
<c:set var="name" value="#{mem.name}"/>
<%
m.setName("dololak2");
%>
출력 : ${name}
위의 예제에서는 JSTL Core의 <c:set> 기능을 통해 page영역에 name이라는 속성명으로 MemberBean객체의 name값을 설정하였습니다. 이 경우 name에는 dololak이 들어간다고 예상할 수 있습니다.
이후에 스크립트릿에서 m.setName()을 통해 dololak2를 name으로 세팅하지만 이미 page영역에는 dololak이 들어가 있기 때문에 MemberBean 객체의 name값 자체는 dololak2로 변경되었다고 하더라도 page 영역의 name속성에는 dololak이 들어있을것으로 예상됩니다.
마지막으로 ${name}로 page영역에 설정되어있는 name 속성값을 출력합니다. 결과는 어떨까요? 결과는 dololak2가 출력됩니다.

결과 분석
결과가 이렇게 나온 이유는 무엇일까요? 스크립트릿에서 수행한 m.setName("dololak2") 코드가 어떻게 page 영역에 세팅된 name 속성에 영향을 미쳤을까요?
그 이유는 EL 표현 방법 중 #{} 표기법을 사용하면 구문을 해석할때 값을 판단하는 것이 아닌 실제로 해당 값이 사용되는 시점에 해석되기 때문입니다. 만약 위의 예제를 ${}표기로 바꾸면 어떻게 될까요?
<%
MemberBean m = new MemberBean();
m.setName("dololak");
pageContext.setAttribute("mem", m);
%>
<c:set var="name" value="${mem.name}"/>
<% m.setName("dololak2"); %>
출력 : ${name}
결과는 처음과 다르게 dololak이 출력됩니다.

그 이유는 ${}의 경우 #{}표기법과는 다르게 구문이 해석되는 해당 시점의 값을 기준으로 판단하기 때문입니다. 아래의 구문을 해석할때 page영역의 name속성에는 그 당시 값인 dololak이 설정되는것입니다.
<c:set var="name" value="${mem.name}"/>
결론
표현언어(EL)의 표기법에 따라 값이 해석되는 시점의 차이가 있습니다. 그러나 #{}의 경우 JSF(Java Server Faces)에서 사용되는 구문으로 거의 대부분의 경우에는 ${}표기를 사용하니 어렵게 고민할 필요는 없을것 같습니다.
다음글
\[서블릿/JSP\] 표현 언어(EL)의 연산자 규칙 및 사용법.
'Servlet&Jsp' 카테고리의 다른 글
| [서블릿/JSP] 표현 언어(EL)의 연산자 규칙 및 사용법. (0) | 2019.08.06 |
|---|---|
| [서블릿/JSP] 표현 언어(EL) 기본 사용법 및 자료형 설명 (0) | 2019.08.06 |
| [서블릿/JSP] 표현 언어(EL, Expression Language)란? (0) | 2019.08.05 |
| [서블릿/JSP] 서블릿 url-pattern 실습 예제 (0) | 2019.08.02 |
| [서블릿/JSP] 서블릿 맵핑시 url-pattern 규칙 (0) | 2019.08.02 |
도로락
WriterIT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그