본문 바로가기
Javascript

JavaScript 타입별 정리 Strings

by Redking

JavaScript에서 문자열은 유니코드 문자이 연결되어 만들어진 것입니다. 이는 국제화(i18n, internationalization) 하려 하는 누구에게라도 환영받을만한 소식입니다. 좀 더 정확히 말하자면, 각각이 16비트 숫자로 표현된 UTF-16 코드 유닛이 길게 이어져있는 것입니다. 각 유니코드 문자는 1개나 2개의 코드 유닛으로 표현됩니다.

 

유니코드는 세계 각국의 서로 다른 언어와 쓰기 방식, 기호 등을 모아 번호를 할당하고 문자를 정의하는 표준 문자 집합입니다.

각각의 문자에 번호를 매김으로써 프로그래머는 문자 인코딩을 제작할 수 있고, 컴퓨터는 그 인코딩을 사용해 같은 파일 또는 프로그램 내에서 어떠한 언어 조합을 사용하더라도 저장, 처리, 전송할 수 있습니다. 

 

유니코드 이전에는 여러가지 언어를  한 번에 정의하기 힘들었고 오류에 취약했습니다. 예를 들어 하나의 문자 집합은 한글, 하나의 집합은 영어라 했을 때 데이터의 어디서부터 어디까지가 한글이고 어디까지가 영어인지 분명하게 표시해놓지 않으면 프로그램이나 컴퓨터가 데이터를 잘못 표시하거나, 처리 과정에서 손상이 발생할 수 있었습니다. 뷁꿟붥과 같은 외계어를 보신 경험이 있으시다면, 프로그램이 문자를 적절히 처리하지 못한 예시를 확인한 것입니다. 웹에서 가장 많이 사용하는 유니코드 문자 인코딩은 UTF-8이니 애용합시다.


문자열은 String 전역 객체를 직접 사용하여 생성할 수 있습니다.

var some = 반환할 값
String(some) // '반환할 값'
'text'

 

작성한 코드가 매우 긴 문자열을 포함해야 하는 경우, 끝 없이 뻗어나가는 한 줄이나 편집기의 재량에 따라 자동으로 줄을 넘기는 대신 직접 여러 줄로 나누되 내용에는 영향을 주지 않고 싶을 때가 있을 겁니다. 이런 상황에는 두 가지 방법을 사용할 수 있습니다.

let longString = "여러 줄에 걸쳐 작성해야 할 정도로 " +
                 "긴 문자열인데 왜 한 줄에 다 적으면 안되냐면 " +
                 "코드를 읽기 힘들어지니까요.";
                 
let longString = "여러 줄에 걸쳐 작성해야 할 정도로 \
긴 문자열인데 왜 한 줄에 다 적으면 안되냐면 \
코드를 읽기 힘들어지니까요.";

문자열에서 개개의 문자에 접근할 수 있는 방법은 두가지가 있습니다.

return 'cat'.charAt(1); // returns "a"

return 'cat'[1];        // returns "a"

브래킷([ ]) 표기법을 사용하여 문자에 접근하는 경우 , 이러한 프로퍼티들에 새로운 값을 할당하거나 삭제할 수는 없습니다. 포함되어 있는 프로퍼티들은 작성할 수도, 수정할 수도 없습니다. 


JavaScript에서는 단지 less-than와 greater-than 연산자만을 사용하여 문자열을 비교할 수 있습니다.

var a = "a";
var b = "b";
if (a < b) { // true
  console.log(a + " is less than " + b);
} else if (a > b) {
  console.log(a + " is greater than " + b);
} else {
  console.log(a + " and " + b + " are equal.");
}

javascript는 string 오브젝트와 원시타입 문자열을 다르게 취급합니다.

 

문자열 리터럴(작은 따옴표 또는 큰 따옴표로 생성되는)과ㅏ 생성자 없이 string을 호출하여 반환된 문자열은 원시타입 문자열(primitive strings)입니다. javascript는 자동적으로 원시타입을 string 오브젝트로 변환하기 때문에, string 오브젝트 메서드를 사용하여 원시타입 문자열을 생성할 수 있습니다. 문맥 안의 메서드에서 프로퍼티 조회 또는 원시타입의 문자열 호출이 발생하면, javascript는 자동으로 문자열 원시타입을 감싸고 프로퍼티 조회를 수행하거나 메서드를 호출합니다.

var s_prim = "foo";
var s_obj = new String(s_prim);

console.log(typeof s_prim); // Logs "string"
console.log(typeof s_obj);  // Logs "object"

문자열 원시타입과 string 오브텍트는 eval()을 사용할 때 다른 결과를 제공합니다. eval에 전달되는 문자열 원시타입들은 소스코드 취급을 받습니다. string 오브젝트는 다른 모든 오브젝트들과 마찬가지로 취급하며, 오브젝트로 변환합니다.

var s1 = '2 + 2';               // creates a string primitive
var s2 = new String('2 + 2');   // creates a String object
console.log(eval(s1));          // returns the number 4
console.log(eval(s2));          // returns the string "2 + 2"

String 오프젝트는 언제든지 valueOf() 메서드로 원시타입에 대응하도록 전환할 수 있습니다.

console.log(eval(s2.valueOf())); // returns the number 4

 

'Javascript' 카테고리의 다른 글

JavaScript 타입별 정리 Object (1)  (0) 2021.03.23
JavaScript 타입별 정리 Null  (0) 2021.03.23
JavaScript 타입별 정리 Symbol  (0) 2021.03.23
JavaScript 타입별 정리 Boolean  (0) 2021.03.23
JavaScript 타입별 정리 Numbers  (0) 2021.03.23

댓글