빈 문자열

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

빈 문자열은 형식 언어 이론에서 길이가 0이고 어떤 기호도 포함하지 않는 문자열을 의미하며, 프로그래밍 언어에서는 다양한 방식으로 표현된다. 형식 언어에서 빈 문자열은 λ, Λ 또는 ε로 표기되며, 공집합 언어와는 구분된다. 프로그래밍 언어에서 빈 문자열은 널 참조와는 다르게 유효한 문자열로 취급되며, 문자열 비교 함수를 통해 동일한 것으로 인식된다. 빈 문자열은 기수법에서 0을 표현하거나 텍스트 파일의 빈 줄을 나타내는 데 사용될 수 있으며, 널 종료 문자열로 해석될 수도 있다.

빈 문자열
📚 더 읽어볼만한 페이지
  • 문자열 - 문자열 연결
    문자열 연결은 프로그래밍 언어에서 문자열을 결합하는 연산으로, `+` 연산자나 별도의 연산자를 사용하며, 런타임 또는 컴파일 시점에 수행될 수 있고, 형식 언어 이론으로 확장되어 음성 합성 등 다양한 분야에서 활용된다.
  • 문자열 - 문자열 검색 알고리즘
    문자열 검색 알고리즘은 텍스트에서 특정 문자열(패턴)을 찾는 알고리즘으로, KMP, 보이어-무어 등의 효율적인 알고리즘을 거쳐 다양한 방식으로 발전해 왔으며, 웹 검색 엔진, 생물 정보학 등 여러 분야에 응용되고 한국어 검색에서는 특별한 고려 사항이 필요하다.
  • 형식 언어 - 문자열
    문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다.
  • 형식 언어 - 튜링 기계
    튜링 기계는 앨런 튜링이 제시한 계산 모델로, 테이프 위에서 기계적으로 작동하며, 유한한 상태, 테이프, 헤드, 명령 표를 통해 작동하고, 계산 가능성과 알고리즘의 한계를 연구하는 데 사용된다.

2. 형식 언어 이론에서의 빈 문자열

형식 언어에서 빈 문자열은 λ로 표기된다. (λ의 대문자인 Λ 또는 ε를 사용하는 경우도 있다). 빈 문자열은 길이가 0이며, 어떤 심볼도 포함하지 않고, 반드시 하나만 존재한다.

빈 문자열을 공집합 언어∅와 혼동하지 않도록 주의해야 한다. 공집합 언어는, 형식 언어(문자열의 집합)에서, 빈 문자열조차 포함하지 않는 공집합을 의미한다.

빈 문자열의 성질은 다음과 같다.

* | \lambda \, | = 0: 빈 문자열의 길이는 0이다.
* \lambda \, + s = s + \lambda \, = s: 어떤 문자열에 빈 문자열을 연결해도, 원래의 문자열과 같다. 빈 문자열은, 문자열 연결에서의 항등원이다 (어떤 문자 집합 Σ에서 자유 모노이드를 구성한다).
* { \lambda \, }^R = \lambda \,: 빈 문자열은 반전해도 빈 문자열 그대로이다.
* 사전식 순서에서는, 빈 문자열은 어떤 문자열보다 앞에 위치한다. 이는 빈 문자열이 가장 짧은 문자열이기 때문이다.

3. 프로그래밍 언어에서의 빈 문자열

대부분의 프로그래밍 언어에서 문자열은 자료형으로 취급되며, 일반적으로 별개의 메모리 주소에 저장된다. 따라서 빈 문자열("")도 메모리에 저장될 수 있으며, 이는 널 포인터와는 다르다. 널 포인터는 아무 문자열도 가리키지 않는 상태를 의미한다.

길이가 0인 문자열(빈 문자열)도 저장 형식에 따라 메모리가 필요할 수 있다. 형식 이론상으로는 빈 문자열이 하나뿐이지만, 실제 프로그래밍 환경에서는 메모리에 여러 개의 빈 문자열이 존재할 수 있다. 그러나 문자열 비교 함수는 이러한 빈 문자열들을 모두 같다고 판단한다.

빈 문자열은 유효한 문자열이며, 대부분의 문자열 연산에 사용될 수 있다. 일부 언어에서는 빈 문자열, 널 포인터, 정수 0, 부동 소수점 0, 부울 값 false, ASCIINUL 등을 유사하게 처리하기도 한다.

일반적으로 빈 문자열은 다른 문자열과 유사하게 표현된다. 널 종료 문자열을 사용하는 경우, 빈 문자열은 단일 널 문자로 표현된다.

오라클 데이터베이스에서는 빈 문자열과 널(SQL)을 구분하지 않는다.

3.1. 다양한 프로그래밍 언어에서의 빈 문자열 표현

👆
좌우로 밀어서 보기
λ 표현프로그래밍 언어
""C, C++, 자바, C#, , PHP, 파이썬, 자바스크립트, Go, 비주얼 베이직 닷넷, 하스켈, 오브젝티브-C (C 문자열로서), OCaml, 표준 ML, 스칼라, Tcl, 루아, Julia, M, Swift, Rust
''SQL, , PHP, 파이썬, 자바스크립트, 델파이, 파스칼, Matlab, APL, R, Ruby, 스몰토크
{'\0'}C, C++, 오브젝티브-C (C 문자열로서)
std::string()C++
@""오브젝티브-C (상수 NSString 객체로서)
[NSString string]오브젝티브-C (새로운 NSString 객체로서)
q(), qq()
%{}루비
""""""
''''''
str()
파이썬
string.EmptyC#, 비주얼 베이직 닷넷
String.make 0 '-'OCaml
{}Tcl
character(0)R
""sC++ (2014 표준 이후)
str()Python
%{}
%()
Ruby
String::new()Rust
Lua
System.String.Empty.NET 언어 전반 (C#의 string 및 VB.NET의 StringSystem.String에 대한 별칭)

3.2. 빈 문자열 처리 시 주의사항

대부분의 프로그래밍 언어에서 빈 문자열은 널 포인터(또는 널 참조)와 구별되는데, 널 참조는 빈 문자열조차 포함하여 문자열을 전혀 가리키지 않기 때문이다. 빈 문자열은 정당한 문자열이므로, 대부분의 문자열 연산이 정상적으로 작동한다.

C/C++의 표준 라이브러리에서 문자열 조작 함수 및 문자열 클래스에 널 포인터(`NULL` 또는 `nullptr`)가 전달된 경우의 동작은 정의되지 않으며, 통상적으로 프로그램이 비정상 종료되는 원인이 된다.

일부 언어는 빈 문자열, 널 참조, 정수 0, 부동 소수점 숫자 0, 부울 값 false, ASCII 문자 NUL 등을 유사하게 처리하기도 한다.

프로그래밍 언어별 빈 문자열 표현은 다음과 같다.

👆
좌우로 밀어서 보기
표현프로그래밍 언어
""C, C#, C++, Go, Haskell, Java, 자바스크립트, Julia, Lua, M, Objective-C (C 문자열), OCaml, Perl, PHP, Python, Ruby, Scala, 표준 ML, Swift, Tcl, Visual Basic .NET
''APL, Delphi, 자바스크립트, Lua, MATLAB, Pascal, Perl, PHP, Python, R, Ruby, 스몰토크, SQL
character(0)R
{'\0'}C, C++, Objective-C (C 문자열)
std::string()C++
""sC++ (2014 표준 이후)
@""Objective-C (상수 NSString 객체)
[NSString string]Objective-C (새로운 NSString 객체)
q(), qq()Perl
str()Python
%{}
%()
Ruby
String::new()Rust
string.EmptyC#, Visual Basic .NET
String.make 0 '-'OCaml
{}Tcl
Lua

4. 빈 문자열의 활용 예시

* 빈 문자열은 텍스트 파일에서 빈 줄을 나타내는 데 사용될 수 있다. 이는 두 개의 연속된 EOL에서 발생할 수 있으며, 텍스트 처리에서 문단을 구분하는 데 사용된다 (예: 미디어위키).
* 위치 기수법에서 빈 문자열은 어떤 기수에서도 0을 나타낸다(단, 선행 0이 없는 경우에도).
* 0으로 채워진 메모리 영역은 널 종료 문자열로 해석되어 빈 문자열이 된다.