본문 바로가기
Spring/Spring Boot & Thymeleaf

[Spring Boot & Thymeleaf] 7. 리터럴(Literal)

by Kloong 2022. 10. 24.

참고

더보기

Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.

 

GitHub - Kloong1/TIL: Today I Learned.

Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.

github.com

타임리프 - 리터럴

  • 리터럴은 소스 코드상에 고정된 값을 말하는 용어이다.
  • 예를 들어서 다음 코드에서 "Hello" 는 문자 리터럴, 10 , 20 는 숫자 리터럴이다.
  • String a = "Hello"
  • int a = 10 * 20
  • 내용이 쉬워 보이지만 처음 타임리프를 사용하면 많이 실수하니 잘 보아두자.

Literal

  • 타임리프에는 다음과 같은 리터럴이 있다.
    • 문자: 'hello'
    • 숫자: 10
    • Boolean: true , false
    • null: null
  • 타임리프에서 문자 리터럴은 항상 ' (작은 따옴표)로 감싸야 한다.
    • <span th:text="'hello'">
  • 그런데 문자를 항상 ' 로 감싸는 것은 너무 귀찮은 일이다. 공백 없이 쭉 이어진다면 하나의 의미있는 토큰으로 인지해서 다음과 같이 작은 따옴표를 생략할 수 있다.
    • A-Z , a-z , 0-9 , [] , . , - , _
    • <span th:text="hello">
  • 다음 태그는 오류가 난다.
    • <span th:text="hello world!"></span>
    • 문자 리터럴은 원칙상 ' 로 감싸야 한다.
    • "hello world!" 는 중간에 공백이 있어서 하나의 의미있는 토큰으로 인식되지 않기 때문에 오류가 난다.
    • <span th:text="'hello world!'"></span>
    • 이렇게 ' 로 감싸면 정상 동작한다.

사용 예시

BasicController.java 내용 추가
package kloong.thymeleaf.basic;

import ... //생략

@Controller
@RequestMapping("/basic")
public class BasicController {

    @GetMapping("/literal")
    public String literal(Model model) {
        model.addAttribute("data", "Thymeleaf!");
        return "basic/literal";
    }
}
/resources/templates/basic/literal.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>리터럴</h1>
<ul>
    <!--주의! 다음 주석을 풀면 예외가 발생함-->
    <!-- <li>"hello world!" = <span th:text="hello world!"></span></li>-->
    <li>'hello' + ' world!' = <span th:text="'hello' + ' world!'"></span></li>
    <li>'hello ' + 1004 + '!' = <span th:text="'hello ' + 1004 + '!'"></span></li>
    <li>'hello world!' = <span th:text="'hello world!'"></span></li>
    <li>[hello-world] = <span th:text="[hello-world]"></span></li>
    <li>'hello ' + ${data} = <span th:text="'hello ' + ${data}"></span></li>
    <li>리터럴 대체 |hello ${data}| = <span th:text="|hello ${data}|"></span></li>
</ul>
</body>
</html>
  • <span th:text="'hello ' + 1004 + '!'">
    • 리터럴 끼리 + 연산을 통해 연결이 가능하다.
  • <span th:text="[hello-world]">
    • 사이에 공백이 없고, A-Z , a-z , 0-9 , [] , . , - , _ 문자들로만 이어진 하나의 토큰이기 때문에 '' 가 없어도 문자 리터럴로 인식된다.
    • 다른 예시 처럼 ! 를 끝에 붙이면 규칙에 어긋난 문자가 포함되기 때문에 오류가 난다.
  • <span th:text="'hello ' + ${data}">
    • 변수 표현식을 리터럴에 더해서 사용할 수 있다.
  • <span th:text="|hello ${data}|">
    • |...| : 리터럴 대체 문법
      • 연산을 쓰지 않고 편하게 쓸 수 있다.

댓글