본문 바로가기
성공지식백과 로고성공지식백과
GLOSSARY

문자열 (String)

입문바이브 코딩

이 페이지는 바이브 코딩 문맥에서 자주 쓰이는 문자열 (String)의 뜻과 쓰임을 입문 난이도 기준으로 정리한 AI 용어사전 항목입니다. 정의와 맥락, 관련 용어 5개 순서로 묶었으니, 아래 설명을 먼저 읽고 연결된 개념과 글까지 이어서 보면 이해가 빨라집니다.

문자열(String)은 문자를 순서대로 이어 놓은 값으로, 프로그램이 텍스트 데이터를 담고 다루는 기본 자료형입니다. 사용자 이름, 프롬프트, API 응답의 텍스트 필드처럼 글로 나타낼 수 있는 데이터가 문자열로 저장됩니다. 언어마다 문자를 세는 단위가 달라서 JavaScript는 UTF-16 코드 단위, Python은 유니코드 코드 포인트의 나열로 문자열을 표현합니다.

언어별 문자열 리터럴과 불변성

MDN의 JavaScript String 문서에 따르면 JavaScript 문자열 리터럴은 작은따옴표와 큰따옴표를 똑같이 취급하고, 백틱 문자로 감싼 템플릿 리터럴에서는 ${a}처럼 식을 끼워 넣을 수 있습니다. 문자열은 "cat"[1]처럼 숫자 인덱스로 한 글자에 접근할 수 있지만, 이 방식으로 글자를 지우거나 다른 값을 대입하는 시도는 성공하지 않습니다. 같은 문서는 리터럴로 만든 원시 문자열과 new String()으로 만든 String 객체를 구분하고, String을 생성자로 쓸 일은 드물다고 적습니다.

Python 공식 문서의 내장 자료형 설명은 str 객체를 유니코드 코드 포인트의 불변 시퀀스로 정의합니다. 리터럴은 작은따옴표, 큰따옴표, 세 겹 따옴표로 쓰며 세 겹 따옴표 문자열은 여러 줄에 걸칠 수 있습니다. Python에는 별도의 문자 자료형이 없어서 문자열을 인덱싱하면 길이 1인 문자열이 나옵니다. 앞에 f를 붙인 f-string은 중괄호로 감싼 치환 필드에 Python 식의 결과를 넣습니다.

불변성은 문자열을 만드는 방식에도 영향을 줍니다. 같은 문서는 불변 시퀀스를 이어 붙이면 항상 새 객체가 생기므로, 반복해서 이어 붙여 긴 문자열을 만들면 전체 길이에 대해 제곱에 비례하는 실행 비용이 든다고 설명합니다. 선형 비용으로 만들려면 조각을 리스트에 모은 뒤 str.join()으로 합치거나 io.StringIO에 쓰는 방법을 안내합니다. 로그 줄이나 프롬프트 조각을 반복문 안에서 계속 이어 붙이는 코드가 이 경우에 해당합니다.

문자 단위와 문자열 비교

JavaScript 문자열의 길이는 사람이 보는 글자 수와 다를 수 있습니다. MDN의 JavaScript String 문서는 문자열을 근본적으로 16비트 UTF-16 코드 단위의 나열로 설명합니다. 기본 다국어 평면(BMP) 밖의 문자는 코드 단위 두 개로 이뤄진 서로게이트 쌍으로 저장됩니다. split("")은 UTF-16 코드 단위로 나누기 때문에 "😄".split("")은 이모지 하나를 짝 없는 서로게이트 두 개로 가르고, 문자열 인덱스도 코드 단위를 가리킵니다.

반면 Python의 str은 코드 포인트의 시퀀스라서, BMP 밖의 이모지 하나를 JavaScript는 코드 단위 두 개로, Python은 코드 포인트 하나로 셉니다. 두 언어 모두에서 화면의 한 글자가 여러 코드 포인트일 수도 있습니다. MDN 문서는 여러 이모지를 <ZWJ>(U+200D)로 이어 한 글자처럼 보이게 만드는 경우를 그래핌 클러스터로 설명하고, 이 단위로 순회하려면 별도 코드가 필요하다고 적습니다. 글자 수 제한이 있는 입력 검사나 미리보기 자르기에서 어느 단위로 세는지가 결과를 바꿉니다.

비교 결과도 문자 처리 규칙에 따라 달라집니다. MDN 문서에 따르면 JavaScript의 ===와 ==를 포함한 모든 비교 연산자는 대소문자를 구분합니다. 대소문자를 무시하려고 양쪽을 toUpperCase()나 toLowerCase()로 바꾸는 방법은 라틴 문자 밖에서 정확하지 않습니다. 독일어 ß와 ss가 모두 SS로 바뀌고, 터키어 ı는 toLocaleLowerCase("tr")를 쓰지 않으면 I와 다르다고 판정됩니다. 문서는 로캘을 고려한 비교에 localeCompare()나 Intl.Collator를 sensitivity 옵션과 함께 쓰라고 안내합니다.

JSON과 API에서 주고받는 문자열

JSON 표준 RFC 8259는 문자열을 0개 이상의 유니코드 문자 시퀀스로 정의하고, 따옴표로 시작하고 끝나게 합니다. 문법 정의의 따옴표는 큰따옴표(U+0022)뿐이라서 JavaScript에서처럼 작은따옴표로 감싼 값은 JSON 문자열이 아닙니다. 큰따옴표, 역슬래시, U+0000부터 U+001F까지의 제어 문자는 반드시 이스케이프해야 하고, 줄바꿈은 \n, 탭은 \t처럼 두 글자 이스케이프로 쓸 수 있습니다.

다른 문자도 \u 뒤에 16진수 네 자리를 붙여 이스케이프할 수 있습니다. BMP 밖의 문자는 UTF-16 서로게이트 쌍을 이어 쓴 12자 표현이 되며, 표준은 높은음자리표 문자(U+1D11E)를 "\uD834\uDD1E"로 적는 예를 듭니다. 닫힌 생태계 밖에서 주고받는 JSON 텍스트는 UTF-8로 인코딩해야 하고, 표준은 네트워크로 보내는 JSON 텍스트 앞에 바이트 순서 표시(U+FEFF)를 붙이지 못하게 합니다.

RFC 8259는 라이브러리가 UTF-16 문자열을 자르다가 서로게이트 쌍을 갈라 "\uDEAD" 같은 짝 없는 서로게이트가 JSON에 들어간 사례를 들고, 이런 값을 받은 소프트웨어의 동작은 예측할 수 없어 문자열 길이를 다르게 반환하거나 치명적인 실행 중 예외가 날 수 있다고 적습니다. JavaScript에서는 MDN의 String 문서가 소개하는 isWellFormed()로 짝 없는 서로게이트를 찾고 toWellFormed()로 U+FFFD 대체 문자로 바꿀 수 있습니다. Python은 바이트로 받은 응답을 bytes.decode()나 인코딩을 지정한 str()로 바꾸며, Python 공식 문서의 str() 설명의 예처럼 인코딩 없이 str(b'Zoot!')을 부르면 "b'Zoot!'"라는 표현 문자열이 나옵니다.

RELATED TERMS

관련 용어

문자열 (String)와 함께 자주 언급되는 개념들입니다. 비슷한 말처럼 보여도 역할과 쓰임은 다를 수 있습니다.