** ๐Ÿ“ŒEL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์™„์ „ ์ •๋ณต โ€“ ${} ํ‘œํ˜„๋ฒ•**


โœ… ๋ชฉ์ฐจ

  1. ${}๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. EL ํ‘œํ˜„ ๋ฐฉ์‹๊ณผ ์‚ฌ์šฉ ์œ„์น˜
  3. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ์˜ˆ์ œ
  4. ๊ฐ์ฒด ์ ‘๊ทผ (์†์„ฑ, ๋ฉ”์„œ๋“œ)
  5. ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งต ์ ‘๊ทผ
  6. EL์˜ ์ž๋™ ํ˜•๋ณ€ํ™˜
  7. ๊ธฐ์ˆ ๋ฉด์ ‘ ๊ด€์  ํ•ต์‹ฌ ์ •๋ฆฌ
  8. ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

1๏ธโƒฃ ${}๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๐Ÿ“˜ EL(Expression Language)์˜ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ.

${...} ์•ˆ์— ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ:

<!-- user.name์„ ์ถœ๋ ฅ -->
<p>์ด๋ฆ„: ${user.name}</p>

๐Ÿ” EL์€ getName() ๊ฐ™์€ getter ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ค๋‹ˆ๋‹ค.


2๏ธโƒฃ EL ํ‘œํ˜„ ๋ฐฉ์‹๊ณผ ์‚ฌ์šฉ ์œ„์น˜

์‚ฌ์šฉ ์œ„์น˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์˜ˆ์‹œ
HTML ๋‚ด๋ถ€ โœ… ๊ฐ€๋Šฅ <p>${user.name}</p>
JSTL ํƒœ๊ทธ ์†์„ฑ โœ… ๊ฐ€๋Šฅ <c:if test="${user != null}">
JS, CSS, ๋งํฌ ๋“ฑ โš ๏ธ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋”ฐ์˜ดํ‘œ ์ฃผ์˜ <script>let id = "${user.id}";</script>

๐Ÿ’ก ์ฃผ์˜: JS ์ฝ”๋“œ ์•ˆ์—์„œ๋Š” ${}๊ฐ€ JS ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๊ณผ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ '${...}' ๋”ฐ์˜ดํ‘œ๋ฅผ ๊ผญ ์”Œ์šฐ์„ธ์š”.


3๏ธโƒฃ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ์˜ˆ์ œ

<%-- ์ˆซ์ž ์ถœ๋ ฅ --%>
<% request.setAttribute("num", 10); %>
<p>${num}</p> <!-- ์ถœ๋ ฅ: 10 -->

<%-- ๋ฌธ์ž์—ด ์ถœ๋ ฅ --%>
<% request.setAttribute("name", "Jane"); %>
<p>${name}</p> <!-- ์ถœ๋ ฅ: Jane -->

4๏ธโƒฃ ๊ฐ์ฒด ์ ‘๊ทผ (์†์„ฑ, getter ๋ฉ”์„œ๋“œ)

<%-- User ๊ฐ์ฒด๋ฅผ setAttribute("user", user) ๋กœ ์ €์žฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • --%>
<p>์•„์ด๋””: ${user.id}</p>
<p>์ด๋ฉ”์ผ: ${user.email}</p>

๐Ÿ”‘ EL์€ ์ž๋™์œผ๋กœ getId(), getEmail()์„ ํ˜ธ์ถœํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.


5๏ธโƒฃ ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งต ์ ‘๊ทผ

๐Ÿ”ธ ๋ฐฐ์—ด & ๋ฆฌ์ŠคํŠธ ์ ‘๊ทผ

<%-- String[] fruits = {"์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "๋”ธ๊ธฐ"} --%>
<% request.setAttribute("fruits", fruits); %>

<p>${fruits[0]}</p> <!-- ์‚ฌ๊ณผ -->

๐Ÿ”ธ Map ์ ‘๊ทผ


%-- Map<String, String> map = new HashMap<>(); map.put("key", "value"); --%>
<% request.setAttribute("map", map); %>

<p>${map.key}</p> <!-- value -->

๐Ÿ’ก Map ์ ‘๊ทผ ์‹œ ์ (.)์œผ๋กœ key ์ ‘๊ทผ ๊ฐ€๋Šฅ. ๋‹จ, key์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด []๋กœ ํ‘œํ˜„.


6๏ธโƒฃ EL์˜ ์ž๋™ ํ˜•๋ณ€ํ™˜

์ƒํ™ฉ ๊ฒฐ๊ณผ
์ˆซ์ž "100" โ†’ ์ˆซ์ž ๋น„๊ต ์ž๋™ ํ˜•๋ณ€ํ™˜
"true" โ†’ boolean ๋น„๊ต ์ž๋™ ํ˜•๋ณ€ํ™˜
${param.age + 10} ๋ฌธ์ž์—ด โ€œ20โ€๋„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋˜์–ด ๊ณ„์‚ฐ

๐Ÿ“Œ EL์€ ์ž…๋ ฅ๋œ ๊ฐ’์„ ์ž๋™์œผ๋กœ boolean, int, double ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


7๏ธโƒฃ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ

์งˆ๋ฌธ ๋‹ต๋ณ€ ์š”์•ฝ
โ“ ${}์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๋Š”? getter ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. (${user.name} โ†’ user.getName())
โ“ Map๊ณผ List๋Š” ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋‚˜์š”? List๋Š” ์ธ๋ฑ์Šค, Map์€ key๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. (${list[0]}, ${map.key})
โ“ EL์—์„œ ๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด <c:out> ์‚ฌ์šฉ
โ“ EL์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€? ํ‘œํ˜„์ด ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง€๋ฉฐ, View ์—ญํ• ์— ์ถฉ์‹คํ•  ์ˆ˜ ์žˆ์Œ

8๏ธโƒฃ ์š”์•ฝ ์ •๋ฆฌ

EL์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ${}์ด๋ฉฐ, JSP์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด, ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, Map ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.


โœ… ๋ณด๋„ˆ์Šค ์‹ค์ „ ์˜ˆ์ œ ๋ชจ์Œ

<%-- DTO ์˜ˆ์‹œ: User ๊ฐ์ฒด --%>
<jsp:useBean id="user" class="model.User" scope="request" />
<%
  user.setId("hong");
  user.setEmail("hong@example.com");
%>

<p>์•„์ด๋””: ${user.id}</p>
<p>์ด๋ฉ”์ผ: ${user.email}</p>