Template Literals

Frontend SELF KO
๋ ˆ๋ฒจ 37 , ๋ ˆ์Šจ 2
์‚ฌ์šฉ ๊ฐ€๋Šฅ

3.1 ์ค‘์ฒฉ ํ‘œํ˜„์‹

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์—์„œ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, ๊ทธ๋ฆฌ๊ณ  ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์–ด๋–ค ํ‘œํ˜„์‹๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.

์˜ˆ์‹œ:

ํ‘œํ˜„์‹ ${a + b}์—์„œ๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง€๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฌธ์ž์—ด result์— ์‚ฝ์ž…๋ผ.

JavaScript
    
      const a = 5;
      const b = 10;

      const result = `The result of ${a} + ${b} is ${a + b}.`;
      console.log(result); // "The result of 5 + 10 is 15."
    
  

3.2 ์ค‘์ฒฉ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ์–ด์„œ ๋ณต์žกํ•œ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.

์˜ˆ์‹œ:

๊ฐ์ฒด user์˜ ๋ฉ”์„œ๋“œ greet()๊ฐ€ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด message ์•ˆ์— ์ค‘์ฒฉ๋ผ ์žˆ์–ด.

JavaScript
    
      const user = {
        name: 'Bob',
        age: 25,
        greet() {
          return `Hello, ${this.name}!`;
        }
      };

      const message = `${user.greet()} You are ${user.age} years old.`;

      console.log(message); // "Hello, Bob! You are 25 years old."
    
  

3.3 ํƒœ๊ทธ๋œ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด (Tagged Templates)

ํƒœ๊ทธ๋œ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด. ์ด๋ฅผ ํ†ตํ•ด ๊ตญ์ œํ™”, ์•ˆ์ „ํ•œ HTML ์‚ฝ์ž… ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ๋ฌธ์ž์—ด ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด.

๋ฌธ๋ฒ•:

    
      function tag(strings, ...values) {
        // ๋ฌธ์ž์—ด๊ณผ ๊ฐ’ ์ฒ˜๋ฆฌ
        return ๊ฒฐ๊ณผ;
      }

      const result = tag`ํ…œํ”Œ๋ฆฟ ์ŠคํŠธ๋ง ์•ˆ์— ${๋ณ€์ˆ˜}`;
    
  

์˜ˆ์‹œ:

ํ•จ์ˆ˜ highlight()๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฐ’์„ <span> ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์„œ highlight ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•ด.

JavaScript
    
      function highlight(strings, ...values) {
        return strings.reduce((result, str, i) =>
          `${result}${str}${values[i] || ''}`, '');
      }

      const name = 'Carol';
      const hobby = 'painting';
      const message = highlight`My name is ${name} and I love ${hobby}.`;

      console.log(message);
      // "My name is <span class="highlight">Carol</span> and I love <span class="highlight">painting</span>."
    
  

3.4 ์•ˆ์ „ํ•œ ๊ฐ’ ์‚ฝ์ž…

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์€ XSS (ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…) ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋ฉด์„œ ๊ฐ’๋“ค์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค˜. ํŠนํžˆ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ HTML์— ์‚ฝ์ž…ํ•  ๋•Œ ์œ ์šฉํ•ด.

์˜ˆ์‹œ:

ํ•จ์ˆ˜ safeHTML()๋Š” ๊ฐ’ ์•ˆ์˜ ์œ„ํ—˜ํ•œ ๋ฌธ์ž๋ฅผ ๊ต์ฒดํ•ด XSS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•ด.

JavaScript
    
      function safeHTML(strings, ...values) {
        return strings.reduce((result, str, i) =>
          `${result}${str}${String(values[i]).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}`, '');
      }

      const userInput = '<script>alert("XSS")</script>';
      const message = safeHTML`User input: ${userInput}`;

      console.log(message);
      // "User input: &lt;script&gt;alert("XSS")&lt;/script&gt;"
    
  
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION