[Thymeleaf] 반복

2025. 9. 16. 18:55·타임리프

웹 화면에서 리스트 데이터를 출력해야 할 때가 많다. 예를 들어 사용자 목록, 게시글 목록, 주문 내역 같은 것들이 있다. 이런 경우에 개발자가 직접 반복문을 작성하는 대신, Thymeleaf는 th:each라는 속성을 제공해서 템플릿 안에서 간단히 반복 처리를 할 수 있도록 도와준다.

 

이제 실제 예시를 통해 어떻게 사용하는지 하나씩 알아보자.

 

 

1. 컨트롤러에서 데이터 준비하기

컨트롤러에서 사용자 리스트를 만들어서 모델에 담는다.

@GetMapping("/each")
public String each(Model model) {
    addUsers(model);
    return "basic/each";
}

private void addUsers(Model model) {
    List<User> list = new ArrayList<>();
    list.add(new User("userA", 10));
    list.add(new User("userB", 20));
    list.add(new User("userC", 30));
    model.addAttribute("users", list);
}

 

2. 뷰 템플릿에서 반복 출력하기

기본 반복

<tr th:each="user : ${users}">
    <td th:text="${user.username}">username</td>
    <td th:text="${user.age}">0</td>
</tr>

→ users 리스트의 각 요소를 꺼내서 user에 담고, 그 안의 username, age 값을 출력한다.

 

 

반복 상태 유지

반복문을 사용할 때는 단순히 데이터를 출력하는 것 외에도, 현재 반복 상태를 확인할 수 있는 유틸이 함께 제공된다.

<tr th:each="user, userStat : ${users}">
    <td th:text="${userStat.count}">count</td>
    <td th:text="${user.username}">username</td>
    <td th:text="${user.age}">0</td>
    <td>
        index = <span th:text="${userStat.index}"></span><br/>
        count = <span th:text="${userStat.count}"></span><br/>
        size = <span th:text="${userStat.size}"></span><br/>
        even? = <span th:text="${userStat.even}"></span><br/>
        odd? = <span th:text="${userStat.odd}"></span><br/>
        first? = <span th:text="${userStat.first}"></span><br/>
        last? = <span th:text="${userStat.last}"></span><br/>
        current = <span th:text="${userStat.current}"></span>
    </td>
</tr>

여기서 userStat은 반복 상태를 담고 있는 객체다. 생략하면 기본적으로 변수명 + "Stat" 이름이 붙는다.

 

3. 실행 결과

실행하면 테이블이 다음과 같이 출력된다.

즉, 반복 상태 값들을 이용해서 행 번호, 전체 크기, 짝수/홀수 여부, 첫 행/마지막 행 여부 등을 쉽게 알 수 있다.

 

4. 반복 상태 값 정리

Thymeleaf의 th:each는 단순히 리스트를 반복하는 것만 있는 게 아니다. 반복하면서 지금 몇 번째인지, 처음인지 마지막인지, 짝수인지 홀수인지 같은 상태 값도 함께 제공해 준다. 이걸 잘 쓰면 화면을 훨씬 유연하게 꾸밀 수 있다.

  • index : 0부터 시작하는 번호. 프로그래머들이 흔히 쓰는 배열 인덱스랑 똑같다.
  • count : 1부터 시작하는 번호. 사람 눈에 보여줄 땐 보통 이게 더 직관적이다.
  • size : 전체 데이터 크기. “전체 3명 중 2번째 사용자” 이런 식으로 표시할 때 유용하다.
  • even / odd : 짝수, 홀수 여부를 알려준다. 테이블 행마다 배경색을 번갈아 줄 때 딱 맞는다.
  • first / last : 첫 번째인지, 마지막인지 알려준다. 예를 들어 첫 행에는 강조 문구, 마지막 행에는 합계 같은 걸 넣을 수 있다.
  • current : 현재 객체 자체. 사실상 user랑 똑같다.

 

마무리하며:

Thymeleaf의 th:each는 단순히 데이터를 반복해서 보여주는 데 그치지 않는다. 반복 상태를 함께 제공하기 때문에, 화면을 더 풍부하게 제어할 수 있도록 도와준다. 예를 들어 짝수/홀수 행에 다른 색을 입히거나, 마지막 행에만 합계를 표시하거나, 첫 번째 데이터만 강조하는 등의 처리를 쉽게 구현할 수 있다.

 

결국 타임리프는 단순한 템플릿 엔진을 넘어, 웹 화면을 개발할 때 자주 필요한 기능들을 직접 제공해주는 도구다.

 

 

감사합니다.

'타임리프' 카테고리의 다른 글

[Thymeleaf] 주석  (0) 2025.09.16
[Thymeleaf] 조건부 평가 (if, unless, switch)  (0) 2025.09.16
[Thymeleaf] 속성 값 설정  (0) 2025.09.15
[Thymeleaf] 연산  (0) 2025.09.15
[Thymeleaf] 리터럴  (1) 2025.09.15
'타임리프' 카테고리의 다른 글
  • [Thymeleaf] 주석
  • [Thymeleaf] 조건부 평가 (if, unless, switch)
  • [Thymeleaf] 속성 값 설정
  • [Thymeleaf] 연산
0kingki_
0kingki_
자바 + 스프링 웹 개발
  • 0kingki_
    0kingki_
    0kingki_
  • 전체
    오늘
    어제
    • 분류 전체보기 (134)
      • 코딩 테스트 (54)
      • 자바 (21)
      • 스프링 (27)
      • 타임리프 (16)
      • 스프링 데이터 JPA (8)
      • 최적화 (2)
      • QueryDSL (4)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    코딩 테스트
    mvc
    재귀
    spring
    타임리프
    예외 처리
    스프링 컨테이너
    QueryDSL
    컬렉션
    최적화
    SOLID
    쿼리dsl
    JPA
    코딩테스트
    dfs
    스프링 데이터 JPA
    다형성
    백준
    예외처리
    스프링
    객체지향
    BFS
    Java
    SpringDataJpa
    불변객체
    쿼리
    LocalDateTime
    thymeleaf
    fetch join
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
0kingki_
[Thymeleaf] 반복
상단으로

티스토리툴바