
์ค๋ JSON.stringify() ๋ฅผ ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ ๊ณผ์ ๊ฐ ์์๋ค. ์ฝ๋์์ฑ์ ์ด๋ ต์ง ์์๋๋ฐ ์์์น๋ ๋ชปํ ๊ณณ์์ ์๊ฐ์ ๋ง์ด ์์๋ค. ๋ฐ๋ก, Template literals...
์ด๊ฒ ์ ๋ผ..? ๋ผ๋ ๋ง๋ง ์ ์ญ๋ฒ ์ธ์น๋ฉด์ ์๊ฒ ๋ ์ฌ์ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์๋๋ ํจ์์ ๋ค์ด์จ ์ธ์๊ฐ ๊ฐ์ฒด์ผ ๋, ์คํ๋๋ ์ฝ๋์ด๋ค.

์๋ก์ด ๋ฐฐ์ด temp ๋ฅผ ์ ์ธํ๋ค.
ํค์ ๊ฐ์ด undefined ์ด๊ฑฐ๋ function ์ด๋ผ๋ฉด stringify๊ฐ ๋๋ฉด ์๋๋ฏ๋ก ๋ฌด์ํ๋ค.
ํค์ ๊ฐ์ด undefined ์ด๊ฑฐ๋ function ์ด ์๋๋ผ๋ฉด ์๋ก์ด ๋ฐฐ์ด์ ํค์ ๊ฐ์ push ํ๋ค.
ํค์ ๊ฐ ํ์
์ ๋ง๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๊ธฐ ์ํด์ ๋ณํํจ์์ธ stringify(ํค์๊ฐ) ์ ํธ์ถํ๋ค.
๋ค ๋ณํ์ด ๋์์ผ๋ฉด temp ๋ฐฐ์ด์ ๋ด๊ธด ๊ฒ๋ค์ join() ํ์ฌ ๋ฐฐ์ด์ ํผ ๋ค, template literal๋ก ๋ง๋ ๊ฐ์ฒด์ ๋ด๋๋ค.
๋ฌธ์ ์์ด ์ ์ฝ๋๊ฐ ์๋ํ๋ค.
`{${temp.join()}}`;
temp ๋ผ๋ ๋ฐฐ์ด์ ๋ชจ์ต์ ๋์ถฉ [' "cat" : "์ผ์น" ', ' "dog" : "๋ฉ๋ฉ" '] ์ด๋ดํ
๊ณ , ์ด ๋ฐฐ์ด์ join() ํ์ฌ ๋ฐฐ์ด์ ํ์ด ๋ฌธ์์ด๋ก ๋ง๋ ๋ค, template literal ๊ฐ์ฒด ์์ ๋ฃ๊ณ ๋ฐํํ๋ค!
์ด๊ฒ ์๋ ๋ด๊ฐ ์๊ฐํ๋ ์ฝ๋์ ๋์์ด์๋ค.

๊ทธ๋ฐ๋ฐ ์๊น ์ฝ๋์์ .join() ์ ์์ ๋ ๋ฌธ์ ์์ด ์๋ํ๋ค.
`{${temp}}`
์ join() ์ ํ์ง ์์๋ ์ํ๋ ๋์๋๋ก ๋์๊ฐ๋ ๊ฑฐ์ง?
์ด๊ฒ ์... ๋ผ?


์ฝ์์ฐฝ์์๋ ํ์ธํด๋ดค๋ค.
๋ฐฐ์ด์ template literal๋ก ๊ฐ์ธ๋๊น ๋ฐฐ์ด์ด ๋ฒ๊ฒจ์ง๊ณ ๋ฌธ์์ด๋ก ๋ณํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ template literal(``) ์ ์ด์ฉํ๊ฑฐ๋,
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
+ ์ฐ์ฐ์๋ฅผ ํตํด ํํ์์ ์ผ๋ฐ ๋ฌธ์์ด์ ์ฝ์
ํ ์ ์๋ค.
์ฌ์ค template literal(``) ์ ์ด์ฉํ์ฌ ๋ฌธ์์ด์ ๋ง๋ค ๋ ํํ์ ์ฝ์
(๋ณด๊ฐ๋ฒ)์ + ๋ก ์ฐ์ฐ๋๋ค.
๋ฌธ์์ด์ด ์๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ์์
์ ToString ์ถ์ ์ฐ์ฐ ๋ก์ง์ด ๋ด๋นํ๋ค. * toString() ์ด๋์ ๋ค๋ฅด๋ค!
์ฐธ๊ณ ๋ธ๋ก๊ทธ ๐ [JavaScript] ๊ฐ์ ๋ณํ - ์ถ์ ์ฐ์ฐ, Abstract operation
์ถ์์ฐ์ฐ์ ํตํด ์์์ ๊ฐ์ ๋ณํ์ด ์ผ์ด๋ template literal๋ก ๋ฐฐ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ด ๋ฒ๊ฒจ์ ธ์ ๋ฌธ์์ด๋ก ๋ฐํ๋๋ค๋ ๊ฒ์ด๋ค.
๐ ๊ณต์๋ฌธ์ : ECMAScriptยฎ 2023 Language Specification : 7.1.16 ToBigUint64 ( argument )

๊ณต์๋ฌธ์ ์์ ์๋ table ์ด๋ค.
template literal์์ ๋ฌธ์์ด๊ณผ ๊ฐ ๋ณด๊ฐ๋ part๋ค์ด ์ฐ์ฐ์ด ๋๋๋ฐ, ๊ฐ์ ๋ณํ(๊ทธ ์ค ToString)์ ํตํด ์ฐ์ฐ๋๋ค๋ ๋ป์ด๋ค.
${[1,2,3,4]}
์ด๋ ๊ฒ template literal์ ๊ฐ์ธ์ง ๋ฐฐ์ด์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ณด๊ฐ๋ ๋ฐฐ์ด์ type object ์ด๋ฏ๋ก, ์ ํ์ ์๋ ๊ท์น ์ค Object ๋ฅผ ๋ฐ๋ฅธ๋ค.
๊ท์น ๋ด์ฉ ๐
Apply the following steps:
1. Let primValue be ? ToPrimitive(argument, string).
2. Return ? ToString(primValue).
Let primValue be ? ToPrimitive(argument, string).
primValue๋ฅผ ToPrimitive(argument, string) ์ด๋ผ๊ณ ํ์ ๋ผ๋ ๋ป์ด๋ค.(ํ์คํ์ง ์์, ํ์ฐธ ์ฝ์ด๋ณธ ๊ฒฝํ์ ๋ฐ๋ฅธ ํ๋จ)
๋ค์ ์ ํ์ ํ๋ฆ์ ๋ฐ๋ผ ToPrimitive ๋ก ๊ฐ๋ณด๋ฉด, ๋ ๊ท์น์ ๋ง์ฃผํ๊ฒ ๋๋ค.
๐ ๊ณต์๋ฌธ์ : ECMAScriptยฎ 2023 Language Specification :7.1.1 ToPrimitive ( input [ , preferredType ] )

ToString ์ฐ์ฐ์ ์ด์ด ToPrimitive(argument, string) ์ฐ์ฐ์ผ๋ก ๋์ด์๋ค.
์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด ์ด ๊ณผ์ ์ ๊ฑฐ์ณ preferredType ์ด string์ด ๋ ๊ฒ์์ ์์ํ๋ค. (๊ทธ๋์ hint๋ string ์ด๋ค)
๋ฐฐ์ด์ type์ object ์ด๋ฏ๋ก, ํ์ a๋ก ๊ฐ๊ฒ ๋๊ณ exoticToPrim์ GetMethod(๋ฐฐ์ด, @@toPrimitive) ์ด๋ผ๊ณ ํ๋ค.
(์ข ์ด๋ ค์ด๋ฐ ์ฝ๊ฒ ๋ณด์๋ฉด ๊ทธ๋ฅ ๋ฐฐ์ด์ ๋ฉ์๋์ธ .toString() ์ ์ด๋ค๋ ๋ป์ผ๋ก ์ถ์ ๋๋ค.)
์ด๋ ๊ฒ ๋ณต์กํ ์ผ๋ จ์ ๊ณผ์ ์ ํตํด์, template literal๋ก ๋ฐฐ์ด์ ๋ณด๊ฐํ๋ฉด .toString() ์ ํธ์ถํ์ฌ ๋ฐฐ์ด์ ๋ฒ๊ฒจ ๋ฌธ์์ด๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด .toString() ๋ฉ์๋๋ฅผ ๊ฐ์ง์ง ์๋ undefined ๋ null ์ ์ด๋ป๊ฒ ๋ ๊น?

์๊น table์ ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํด๋ณด์๋ฉด, undefined์ "undefined" ๋ก ๋ณํ๋๊ณ , null์ "null"๋ก ๋ณํ๋๋ค.
template literal์ "" + ๋ณ์ + "" ์ฒ๋ผ ๋์ํ๋ค.
๋ฐฐ์ด์ template literal๋ก ๊ฐ์ ๊ฒฝ์ฐ ์์์ ๊ฐ์ ๋ณํ์ด ์ผ์ด๋ ์ถ์์ฐ์ฐ์ ํตํด .toString() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฐฐ์ด์ด ๋ฒ๊ฒจ์ง๊ณ ๋ฌธ์์ด์ด ๋ฐํ๋๋ค.



์ง์ง ๊ฐ๋ฌด์ํ๋ template literalํํ ๊ฐ ๋๋๋ ค ๋ง์ ํ๋ฃจ์๋ค. ์์๋ด๋๋ฐ 2์๊ฐ, ์ ๋ฆฌํ๋๋ฐ 2์๊ฐ ๊ฑธ๋ ธ๋ค. ์์ฃผ ์๋ฏธ์์ง ์์๋ค. ๋๋ฆ๋๋ก ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์๊ฐ๋์ง ๊ณต๋ถ๊ฐ ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ดค์ ๊ฐ๋ฏธ๋ฅ๊พธ๋ฉ๋งํผ๋ ์๋๊ฒ ์ง๋ง,,
ํน์๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์ ! ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.๐ฑ