String

https://devdocs.io/javascript/global_objects/stringarrow-up-right

String ์ „์—ญ๊ฐ์ฒด๋Š” ๋ฌธ์ž์—ด์˜ ์ƒ์„ฑ์ž์ด๋‹ค.

Syntax

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ๐Ÿ‘‡

'sting text'
"string text"
"์˜์–ด ํ•œ๊ตญ์–ด ๊ธฐํƒ€ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ˆ˜์šฉ"

'', "" ๋ฅผ ์‚ฌ์šฉ

global object๋ฅผ ๋ฐ”๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

String(thing)

Parameters

thing string ์•„๋ฌด๊ฐ’์ด๋‚˜.

Template literals

ECMAScript 2015๋ถ€ํ„ฐ๋Š” string literal์ด Template Iiterals๊ฐ€ string literal์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

`hello ${world}`

Escape notation

ํŠน์ˆ˜๋ฌธ์ž ํ‘œํ˜„ ์ด๋Ÿฐ๊ฑธ Escape notation ์ด๋ผ๊ณ  ํ•˜๋Š”๊ตฌ๋‚˜ ๐Ÿค”

javascript๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ์™€ ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ด€์—†์ด ๋™์ž‘ํ•œ๋‹ค.

์ฝ”๋“œ

์ถœ๋ ฅ

\XXX

8์ง„์ˆ˜ Latin-1 ๋ฌธ์ž (where XXX is 1โ€“3 octal digits; range of 0โ€“377)

\'

"\'" => "''" ์ž‘์€ ๋”ฐ์˜ดํ‘œ

\"

"\"" => """ ํฐ ๋”ฐ์˜ดํ‘œ

\\

"\\" => "\" ์—ญ์Šฌ๋ž˜์‹œ

\n

"\n abc" => " abc" ๊ฐœํ–‰

\r

carriage return ์ด๊ฒƒ์ด ๋ฌด์—‡์ธ๊ฐ€.. ์˜ˆ์ „ ํƒ€์ž๊ธฐ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด์•ผ ํ•  ์ •๋„ line feed์™€ carriage return์ด ํ•จ๊ป˜ํ•ด์•ผ ๋‹ค์Œ์ค„ ์‹œ์ž‘๋ถ€๋ถ„์—์„œ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. https://stackoverflow.com/questions/12747722/what-is-the-difference-between-a-line-feed-and-a-carriage-returnarrow-up-right ์ฐธ๊ณ 

\v

vertical tab ๐Ÿค”

\b

backspace

\f

form feed If you were programming for a 1980s-style printer, it would eject the paper and start a new page. You are virtually certain to never need it. https://stackoverflow.com/questions/4334370/escape-sequence-f-form-feed-what-exactly-is-itarrow-up-right

\uXXXX

unicode codepoint "\u0056" => "V"

\xXX

Latin-1 ๋ฌธ์ž (where XX is 2 hex digits; range of 0x00โ€“0xFF)

Long literal strings

ํ•œ์ค„์„ ์—ฌ๋Ÿฌ์ค„๋‚ด์— ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ์—”

+์—ฐ์‚ฐ์ž ํ˜น์€ "\" ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ธด ๋ฌธ์ž์—ด์„ ๊ฐœํ–‰ํ•˜์—ฌ๋„ ํ•œ์ค„๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์—ญ์Šฌ๋ž˜์‹œ ๋‹ค์Œ์— ์–ด๋–ค ๋ฌธ์ž๋„ ์™€์„œ๋Š” ์•ˆ๋œ๋‹ค.

Description

๋ฌธ์ž์—ด์€ ํ…์ŠคํŠธ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ length ์—ฐ๊ฒฐํ•˜๋Š” +์™€ += ์—ฐ์‚ฐ์ž ์„œ๋ธŒ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•˜๋Š” substring, ์žˆ์œผ๋ฉด ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” indexOf() , ์„œ๋ธŒ ๋ฌธ์ž๋ฅผ ์ถ”์ถœํ•˜๋Š” substring()

Character access(๋ฌธ์ž์ ‘๊ทผ)

  1. charAt() ๋ฉ”์„œ๋“œ ์ด์šฉํ•˜๊ธฐ

  2. ECMAScript 5์—์„œ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ object๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๊ธฐ

    ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.

๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๋‹ค

์ด๋Ÿฐ์ ์„ ๋ณด๊ณ  ๋‘˜ ๋‹ค "๋ฌธ์ž์˜ ๋ฐฐ์—ด"์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋‹ˆ๋‹ค.

  1. ๋ฌธ์ž์—ด์€ "๋ถˆ๋ณ€ ๊ฐ’ Immutable"์ด์ง€๋งŒ ๋ฐฐ์—ด์€ "๊ฐ€๋ณ€๊ฐ’ Mutable"์ด๋‹ค.

    str[1]๋ฒˆ์ฒ˜๋Ÿผ ํŠน์ •๋ฌธ์ž๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์œ ํšจํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

    ์‹ค์ œ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ 7์€ ์ด๋ฅผ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋กœ ์ธ์‹ํ•œ๋‹ค.

    str.charAt(1)๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ๋งž๋‹ค.

  2. ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์œผ๋กœ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์€ ์ƒ์„ฑํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด๋ฉ”์„œ๋“œ๋Š” ๊ทธ ์ž๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ๋‹ค.

๋ฌธ์ž์—ด์„ ๋‹ค๋ฅผ ๋•Œ ์œ ์šฉํ•œ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์— ์“ธ ์ˆ˜ ์—†์ง€๋งŒ, ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋ถˆ๋ณ€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋ ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐ์—ด์˜ ๊ฐ€๋ณ€ ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์ด๋ผ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ๊ฐ€๋ณ€ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ๋Š” ํ†ตํ•˜์ง€ ์•Š๊ณ , ๋นŒ๋ ค ์“ฐ๋Š” ๊ฒƒ ๋˜ํ•œ ์•ˆ๋œ๋‹ค.

๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ณ  ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š” Hack์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ด ์‚ฌ์šฉ์€ Codewars์—์„œ ๋งค์šฐ ํ”ํ”.. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ(ํŠน์ˆ˜๋ฌธ์ž, Multibyte ๋“ฑ) ์ด ๋ฐฉ๋ฒ•์ด ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ƒ๊ฐ์„ ๋‹ฌ๋ฆฌํ•˜์—ฌ ์ž‘์—…์ด ๋นˆ๋ฒˆํžˆ ํ•„์š”ํ•œ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด๋กœ ์ทจ๊ธ‰ํ•˜๋Š”๊ฒŒ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

Comparing strings(๋ฌธ์ž์—ด ๋น„๊ต)

less-than๊ณผ greater-than ์—ฐ์‚ฐ์ž๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

String ์ธ์Šคํ„ดํŠธ์— ์ƒ์†๋œ localeCompare() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

native

ํŠน์ • ๋ธŒ๋ผ์šฐ์ €์— ์ข…์†๋˜์ง€ ์•Š์€ ECMAScript ๋ช…์„ธ์˜ ๋‚ด์žฅ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. (Window, Button ๋“ฑ์€ ์ œ์™ธ)

Stirng()์„ ํฌํ•จํ•˜์—ฌ Number(), Boolean(), Array(), Object(), Function(), RegExp(), Dat(), Error(), Symbol() ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋„ค์ดํ‹ฐ๋ธŒ๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜์ด๋‹ค.

native prototype

๋‚ด์žฅ ๋„ค์ดํ‹ฐ๋ธŒ ์ƒ์„ฑ์ž๋Š” ๊ฐ์ž์˜ .prototype ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง„๋‹ค.(Array.prototype, String.prototype)

prototype ๊ฐ์ฒด์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ•˜์œ„ ํƒ€์ž…๋ณ„๋กœ ๊ณ ์œ ํ•œ ๋กœ์ง์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.

๋ฌธ์ž์—ด ์›์‹œ ๊ฐ’์„ ๋ฐ•์‹ฑ์œผ๋กœ ํ™•์žฅํ•œ ๊ฒƒ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  String ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Stirng.prototype ๊ฐ์ฒด์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… ์œ„์ž„(prototype Delegation) ๋•๋ถ„์— ๋ชจ๋“  ๋ฌธ์ž์—ด์ด ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

String์€ "๋ถˆ๋ณ€ ๊ฐ’ Immutable"์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์—†๋‹ค. ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค.

Distinction between string primitives and String objects

string primitives์™€ string object๋Š” ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰ํ•œ๋‹ค.

primitive strings

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด(์ž‘์€ ๋”ฐ์˜ดํ‘œ๋‚˜ ํฐ ๋”ฐ์˜ดํ‘œ)๊ณผ ์ƒ์„ฑ์ž ์—†์ด(new ํ‚ค์›Œ๋“œ ์—†์ด) String ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ ๋ฌธ์ž์—ด

new String('string object') ์ƒ์„ฑ์ž์˜ ๊ฒฐ๊ณผ๋Š” ์›์‹œ๊ฐ’ 'string object'๋ฅผ ๊ฐ์‹ผ object wrapper ์ด๋‹ค.

typeof stringObject // "object" ์ด ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ณด๋ฉด ์ž์‹ ์„ ๊ฐ์‹ผ ์›์‹œ๊ฐ’์˜ ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ object์˜ ํ•˜์œ„ ํƒ€์ž…์— ๊ฐ€๊น๋‹ค.

console.log๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ ๋ชจ์Šต (๋ธŒ๋ผ์šฐ์ € ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค)

String, Number, Boolean ๊ฐ™์€ ๋‹จ์ˆœ primitive๋Š” boxing ๊ณ ์ •์„ ๊ฑฐ์นœ๋‹ค.

String ์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์„ ๋ณด์•„ ํ•ด๋‹น ๊ฐ์ฒด ๋ž˜ํผ๋กœ ์ž๋™ ๋ฐ•์‹ฑ๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Wrapper Boxing

์›์‹œ๊ฐ’์—” ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์›์‹œ ๊ฐ’์„ ๊ฐ์ฒด ๋ ˆํผ๋กœ ๊ฐ์‹ธ์•ผํ•˜๋Š”๋ฐ -> ์ด๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์ ์œผ๋กœ ํ•ด์ค€๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด?

str.length๋Š” ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ๋Š” ์ผ์ด ์ƒ๊ธฐ๋‹ˆ๊นŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋„๋ก String Object๋กœ ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹์„๊นŒ?

๋‹ต์€ ๋†‰!

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šค์Šค๋กœ ์ตœ์ ํ™” ํ•œ๋‹ค.

  2. ๊ฐœ๋ฐœ์ž๊ฐ€ ์„  ์ตœ์ ํ™”(pre-Opimize)ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์˜คํžˆ๋ ค ๋” ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ง์ ‘ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์จ์•ผํ•  ์ด์œ ๋Š” ๊ฑฐ์˜ ์—†๋‹ค. ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์›์‹œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ž

์ˆ˜๋™์œผ๋กœ ์›์‹œ ๊ฐ’์„ ๋ฐ•์‹ฑํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด Object()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž

๊ฐ์ฒด ๋ž˜ํผ๋กœ ์ง์ ‘ ๋ฐ•์‹ฑํ•˜๋Š”๊ฑด ๊ถŒํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ new Boolean(false ๊ฐ™์€ ๊ฒฝ์šฐ ๊ฐ์ฒด ๋ž˜ํผ๋กœ truthy ๊ฐ’์ด ๋œ๋‹ค. ์ด๋Ÿฐ๊ฒฝ์šฐ๋“ฑ์„ ๋Œ€๋น„ํ•˜์—ฌ Object()๋กœ ํ•˜์Ÿˆ

์ฐธ๊ณ 

Last updated