** ๐Ÿ“Œ, ๋ฐ˜๋ณต๋ฌธ ์™„์ „ ์ •๋ณต **


โœ… ๋ชฉ์ฐจ

  1. ๋ฐ˜๋ณต ํƒœ๊ทธ ์†Œ๊ฐœ
  2. <c:forEach> ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
  3. <c:forEach> ์ฃผ์š” ์†์„ฑ ์„ค๋ช…
  4. <c:forTokens> ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
  5. ์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ
  6. ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ
  7. ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

1๏ธโƒฃ ๋ฐ˜๋ณต ํƒœ๊ทธ ์†Œ๊ฐœ

๐Ÿ“˜ JSTL์—์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ํƒœ๊ทธ

ํƒœ๊ทธ ์„ค๋ช…
<c:forEach> ์ž๋ฐ”์˜ for, foreach๋ฌธ์ฒ˜๋Ÿผ ๋ฐ˜๋ณต
<c:forTokens> ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด ๋ฐ˜๋ณต

2๏ธโƒฃ <c:forEach> ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

<c:forEach var="item" items="${๋ฆฌ์ŠคํŠธ/๋ฐฐ์—ด}">
  ${item}
</c:forEach>

๐Ÿ”น ์˜ˆ์ œ: ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

<c:forEach var="fruit" items="${fruitList}">
  <li>${fruit}</li>
</c:forEach>

3๏ธโƒฃ <c:forEach> ์ฃผ์š” ์†์„ฑ ์ •๋ฆฌ

์†์„ฑ ์„ค๋ช… ์˜ˆ์‹œ
var ๊ฐ ๋ฐ˜๋ณต ํ•ญ๋ชฉ์„ ๋ฐ›์„ ๋ณ€์ˆ˜๋ช… var="item"
items ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งต ๋“ฑ items="${list}"
begin ์‹œ์ž‘ ์ธ๋ฑ์Šค (0๋ถ€ํ„ฐ) begin="0"
end ์ข…๋ฃŒ ์ธ๋ฑ์Šค end="4"
step ๋ฐ˜๋ณต ๊ฐ„๊ฒฉ (๊ธฐ๋ณธ: 1) step="2"
varStatus ๋ฐ˜๋ณต ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜ varStatus="status"

๐Ÿ”ธ ์˜ˆ์ œ: ์ธ๋ฑ์Šค + ํ•ญ๋ชฉ ์ถœ๋ ฅ

<c:forEach var="name" items="${nameList}" varStatus="vs">
  <p>${vs.index + 1}๋ฒˆ์งธ: ${name}</p>
</c:forEach>

๐Ÿง  varStatus์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†์„ฑ๋“ค:

์†์„ฑ ์„ค๋ช…
index ํ˜„์žฌ ์ธ๋ฑ์Šค (0๋ถ€ํ„ฐ)
count ๋ฐ˜๋ณต ํšŸ์ˆ˜ (1๋ถ€ํ„ฐ)
first ์ฒซ ๋ฐ˜๋ณต์ธ์ง€ ์—ฌ๋ถ€ (true/false)
last ๋งˆ์ง€๋ง‰ ๋ฐ˜๋ณต์ธ์ง€ ์—ฌ๋ถ€ (true/false)

4๏ธโƒฃ <c:forTokens> ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๐Ÿ“˜ ๋ฌธ์ž์—ด์„ ํŠน์ • ๊ตฌ๋ถ„์ž๋กœ ์ž˜๋ผ์„œ ๋ฐ˜๋ณต

<c:forTokens var="color" items="๋นจ๊ฐ•,ํŒŒ๋ž‘,๋…ธ๋ž‘" delims="," >
  <p>${color}</p>
</c:forTokens>

5๏ธโƒฃ ์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ

๐Ÿ”ธ ์˜ˆ์ œ 1: ํšŒ์› ๋ชฉ๋ก ์ถœ๋ ฅ

<table>
  <tr><th>๋ฒˆํ˜ธ</th><th>์ด๋ฆ„</th><th>์ด๋ฉ”์ผ</th></tr>
  <c:forEach var="member" items="${memberList}" varStatus="vs">
    <tr>
      <td>${vs.count}</td>
      <td>${member.name}</td>
      <td>${member.email}</td>
    </tr>
  </c:forEach>
</table>

๐Ÿ”ธ ์˜ˆ์ œ 2: ์ง์ˆ˜ ์ธ๋ฑ์Šค๋งŒ ์ถœ๋ ฅ

<c:forEach var="item" items="${items}" begin="0" step="2">
  <p>${item}</p>
</c:forEach>

๐Ÿ”ธ ์˜ˆ์ œ 3: ํŽ˜์ด์ง•์„ ์œ„ํ•œ ์‹œ์ž‘๋ฒˆํ˜ธ ~ ๋๋ฒˆํ˜ธ ๋ฐ˜๋ณต

<c:forEach var="i" begin="1" end="10">
  <a href="list.jsp?page=${i}">${i}</a>
</c:forEach>

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

์งˆ๋ฌธ ๋ชจ๋ฒ” ๋‹ต๋ณ€
โ“ <c:forEach>์™€ ์ž๋ฐ”์˜ for๋ฌธ์˜ ์ฐจ์ด์ ์€? <c:forEach>๋Š” JSP์—์„œ ๋ฐ˜๋ณต์„ ํ‘œํ˜„์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” JSTL ํƒœ๊ทธ์ด๋ฉฐ, View์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Œ
โ“ varStatus๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ์žˆ๋‚˜์š”? index, count, first, last ๋“ฑ์˜ ๋ฐ˜๋ณต ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•จ
โ“ <c:forTokens>๋Š” ์–ธ์ œ ์“ฐ๋‚˜์š”? ๋ฌธ์ž์—ด์„ ํŠน์ • ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ  ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
โ“ ๋ฆฌ์ŠคํŠธ ์—†์ด begin, end๋งŒ ์“ฐ๋ฉด? ์ˆซ์ž ๋ฒ”์œ„ ๋ฐ˜๋ณต์ด ๊ฐ€๋Šฅ (1๋ถ€ํ„ฐ 10๊นŒ์ง€ ๋“ฑ)
โ“ ๋ฐ˜๋ณต ์ค‘ ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด? varStatus="vs" โ†’ ${vs.index} ๋˜๋Š” ${vs.count} ์‚ฌ์šฉ

7๏ธโƒฃ ์š”์•ฝ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

๐Ÿ“Œ ๋Š” JSTL์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ ํƒœ๊ทธ์ด๋ฉฐ,

๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ, ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๋“ฑ์— ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

<c:forTokens>๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ,

varStatus๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ์ƒํƒœ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.