공백 문자

**공백 문자**(whitespace character)는 컴퓨터가 표시를 위해 텍스트를 렌더링할 때 여백을 나타내는 문자 데이터 요소이다.

예를 들어, 공백 문자(, ASCII 32)는 서구 스크립트에서 띄어쓰기와 같은 빈 공간을 나타낸다.

인쇄 가능한 문자는 렌더링 시 출력을 생성하지만, 공백 문자는 그렇지 않다.
대신, 공백 문자는 텍스트의 레이아웃을 제한적으로 정의하며, 서로 나란히 문자를 렌더링하는 일반적인 순서를 방해한다.
후속 문자의 출력은 일반적으로 오른쪽(또는 오른쪽에서 왼쪽으로 쓰는 문자의 경우 왼쪽)으로 또는 다음 줄의 시작으로 이동한다.
여러 연속적인 공백 문자의 효과는 누적되며, 다음 인쇄 가능한 문자는 선행 공백 문자의 누적 효과에 따라 위치에 렌더링된다.

공백이라는 용어의 기원은 흰색 종이에 텍스트를 렌더링하는 일반적인 관행에 뿌리를 두고 있다. 일반적으로 공백 문자는 흰색으로 렌더링되지 않는다. 렌더링에 영향을 미치지만, 그 자체는 렌더링되지 않는다.

## 개요
[섬네일|upright|다양한 [유니코드 공백 문자의 너비]]

공백 문자는 일반적으로 글자 너비와 거의 같은 수평 공간을 삽입한다. 고정폭 글꼴의 경우 너비는 글자의 너비이며, 가변폭 글꼴의 경우 너비는 글꼴에 따라 다르다. 일부 글꼴은 너비가 다른 여러 공백 문자를 지원한다.

탭 문자는 일반적으로 응용 프로그램에 따라 달라지는 탭 정지를 기반으로 수평 공간을 삽입한다.

새줄 문자 시퀀스는 일반적으로 렌더링 출력 위치를 다음 줄의 시작으로 이동시킨다. 텍스트 다음에 오는 경우 실제로 공백을 생성하지 않는다. 그러나 텍스트 블록 사이에 두 개의 연속된 새줄 시퀀스는 블록 사이에 빈 줄을 생성한다. 빈 줄의 높이는 응용 프로그램에 따라 다르다.

텍스트를 배치하기 위해 공백 문자를 사용하는 것은 관례이다. 응용 프로그램은 때때로 공백 문자를 보이는 마크업으로 렌더링하여 사용자가 일반적으로 보이지 않는 것을 볼 수 있도록 한다.

일반적으로 컴퓨터 사용자는 를 눌러 공백 문자를 입력하고, 을 눌러 탭 문자를 입력하며, 를 눌러 새줄을 입력한다.

## 유니코드

아래 표는 유니코드 문자 데이터베이스에서 공백("WSpace=Y", "WS") 문자로 정의된 25개의 문자를 나열한다. 이 중 17개는 양방향 쓰기("Bidirectional Character Type=WS") 알고리즘과 일치하는 공백 정의를 사용하며 "Bidi-WS" 문자로 알려져 있다. 나머지 문자도 사용될 수 있지만, 이 "Bidi" 유형에 속하지 않는다.

참고: 다음 표를 볼 때 사용되는 브라우저 및 글꼴에 따라 모든 공백이 제대로 표시되지 않을 수 있다.

### 대체 이미지
유니코드는 또한 눈에 보이는 기호가 표시되어야 하는 컨텍스트에서 다양한 공백 문자를 나타내는 데 사용할 수 있는 일부 눈에 보이는 문자를 제공한다.



; 정확한 공백
* 캠브리지 Z88은 운영 체제의 디스플레이 드라이버에 의해 "…"로 표시되는 특별한 "정확한 공백"(코드 포인트 160 또는 0xA0)을 제공했다( 키보드 단축키 로 호출 가능). 따라서 BBC BASIC과 함께 "점 공백"으로도 알려졌다.
* 코드 포인트 224 (0xE0) 아래에서 컴퓨터는 특별한 세 문자 폭의 SPACE 기호 `"SPC"`를 제공했다(유니코드의 한 문자 폭 U+2420과 유사).

### 비공백 빈칸
* 점자 패턴 유니코드 블록에는 이 포함되어 있는데, 이는 점이 없는 점자 패턴이다. 일부 글꼴은 이 문자를 고정 너비의 빈칸으로 표시하지만, 유니코드 표준은 명시적으로 이를 공백으로 작동하지 않는다고 명시하고 있다.
* 유니코드의 한국어 알파벳 지원에는 쓰여진 글자가 없음을 나타내는 여러 코드 포인트가 포함되어 있어 글리프를 표시하지 않는다.
** 유니코드에는 한글 호환 자모 블록에 한글 채움 문자()가 포함되어 있다. 이는 글자로 분류되지만, 자모가 없는 한글 블록처럼 빈 공간으로 표시된다. KS X 1001 한글 조합 시퀀스에서 이를 도입하거나 위치에 글자가 없음을 나타내는 데 사용되지만, 유니코드의 조합 자모 시스템에서는 사용되지 않는다.
** 유니코드의 조합 자모 시스템은 음절 블록 내에서 초성 또는 중성 위치에 글자가 없음을 나타내기 위해 유사한 한글 초성 채움 문자 및 한글 중성 채움 문자를 사용하며, 이는 한글 자모 블록(, )에 포함되어 있다.
** 또한 반각 및 전각 문자에 반각 한글 채움 문자()가 포함되어 있는데, 이는 조합형 (또는 완성형) 및 N-바이트 한글 (또는 해당 EBCDIC 대응)의 문자를 모두 포함하는 인코딩(예: Johab 및 EBCDIC 채움 문자를 모두 포함하는 IBM-933)에서 매핑할 때 사용된다.

## 공백과 디지털 타이포그래피
[섬네일|upright|[시카고 매뉴얼 오브 스타일은 다양한 크기의 공백을 사용하는 규칙을 가지고 있다.]]

### 화면 표시
문서 편집기, 워드 프로세서 및 데스크톱 출판 소프트웨어는 화면에 공백을 나타내는 방식과 화면 또는 열 너비보다 긴 줄 끝에 있는 공백을 나타내는 방식이 다르다. 어떤 경우에는 공백이 단순히 빈 공간으로 표시되지만, 다른 경우에는 가운뎃점 또는 다른 기호로 표시될 수도 있다. 많은 다른 문자(아래 설명)가 공백을 생성하는 데 사용될 수 있으며, 비문자 기능(예: 여백 및 탭 설정)도 공백에 영향을 미칠 수 있다.

많은 유니코드 공백 문자는 고전적인 인쇄 타이포그래피와의 호환성을 위해 만들어졌다.

디지털 타이포그래피에 알고리즘 커닝 및 정당화가 있더라도, 필요할 때 이러한 공백 문자를 전자 형식화에 보충하는 데 사용할 수 있다.

### 가변 폭 범용 공백
컴퓨터 문자 인코딩에서 일반적인 **범용 공백**(유니코드 문자 U+0020)은 서체의 디자인에 따라 너비가 달라진다. 일반적인 값은 1/5 em에서 1/3 em 사이이다(디지털 타이포그래피에서 em은 글꼴의 명목 크기와 같으므로 10포인트 글꼴의 경우 공백은 2에서 3.3포인트 사이일 것이다). 정교한 글꼴은 굵게, 기울임꼴, 작은 대문자 글꼴에 대해 다른 크기의 공백을 가질 수 있으며, 종종 조판사는 텍스트의 크기와 중요도에 따라 공백의 너비를 수동으로 조정한다.

이 범용 공백 외에도 특정 너비의 공백을 인코딩하는 것이 가능하다. 완전한 목록은 위 표를 참조하라.

### 대시 주변의 헤어 공백
괄호 구분자로 사용되는 엠 대시와 단어 결합자로 사용되는 엔 대시는 일반적으로 텍스트와 연속적으로 설정된다. 그러나 이러한 대시는 선택적으로 **헤어 공백**, U+200A 또는 **[[얇은 공백]]**, U+2009로 둘러쌀 수 있다. 헤어 공백은 숫자 문자 참조 `&amp;#x200A;` 또는 `&amp;#8202;`, 또는 명명된 엔티티 `&amp;hairsp;`를 사용하여 HTML에서 작성할 수 있다. 얇은 공백은 명명된 엔티티 `&amp;thinsp;` 및 숫자 참조 `&amp;#x2009;` 또는 `&amp;#8201;`이다. 이 공백은 일반 공백보다 훨씬 얇다((비비례) 고정폭 글꼴 제외), 특히 헤어 공백은 수평 공백 문자 중 가장 얇다.

## 컴퓨팅 응용 프로그램
### 프로그래밍 언어
대부분의 프로그래밍 언어 구문에서 공백 문자는 토큰을 구분하는 데 사용될 수 있다. 자유 형식 언어의 경우 공백 문자는 코드 프로세서(즉, 컴파일러)에 의해 무시된다. 언어 구문이 공백을 요구하더라도, 종종 여러 공백 문자는 단일 공백과 동일하게 처리된다. 오프사이드 룰 언어에서는 들여쓰기 공백이 구문적으로 중요하다. 풍자적이고 반대되는 언어인 화이트스페이스에서는 공백 문자만이 중요한 문자이며 일반 텍스트는 무시된다.

소스 코드에서 공백을 잘 사용하면 관련 논리를 그룹화하고 코드를 이해하기 쉽게 만들 수 있다.
줄 끝에 렌더링 동작을 제공하지 않는 과도한 공백 사용은 성가신 것으로 간주된다.

대부분의 언어는 ASCII 코드를 가진 공백 문자만 인식한다. 위에 나열된 유니코드 코드 대부분을 허용하지 않는다. C 언어는 공백 문자를 "공백, 가로 탭, 새 줄, 세로 탭 및 용지 공급"으로 정의한다. HTTP 네트워크 프로토콜은 프로토콜의 다른 부분에서 다른 유형의 공백을 사용하도록 요구한다. 예를 들어, 상태 줄에서는 공백 문자만, 줄 끝에는 CRLF, 헤더 값에는 "선형 공백" 등이 있다.

### 명령줄 구문 분석
일반적인 명령줄 파서는 공백 문자를 사용하여 인자를 구분한다. 공백 문자가 포함된 값은 해당 값이 여러 인자로 구문 분석되어 문제가 발생한다. 일반적으로 파서는 텍스트를 따옴표로 묶어 일반적인 인자 구문 분석을 이스케이프하도록 허용한다.

"foo bar"라는 디렉터리의 파일을 나열한다고 가정해 보자. 이 명령은 "foo" 또는 "bar"와 일치하는 파일을 나열한다.


```bash
ls foo bar
```


이 명령은 단일 인자를 올바르게 지정한다.


```bash
ls "foo bar"
```


다른 방법은 역슬래시로 공백을 이스케이프하는 것이다.


```bash
ls foo\ bar
```


### 마크업 언어
SGML과 같은 일부 마크업 언어는 작성된 대로 공백을 보존한다.

XML 및 HTML과 같은 웹 마크업 언어는 프로그래머의 편의를 위해 공백 문자를 특별하게 처리한다. 해당 마크업 언어의 준수하는 표시 시간 프로세서가 읽는 하나 이상의 공백 문자는 의미론적 컨텍스트에 따라 0 또는 1개의 공백으로 축소된다. 예를 들어, 텍스트 내의 이중(또는 그 이상) 공백은 단일 공백으로 축소되며, 속성 이름과 해당 값을 구분하는 "`=`" 양쪽에 나타나는 공백은 문서 해석에 영향을 미치지 않는다. 요소 끝 태그에는 후행 공백이 포함될 수 있으며, XML의 빈 요소 태그에는 "`/>`" 앞에 공백이 포함될 수 있다. 이러한 언어에서 불필요한 공백은 파일 크기를 증가시켜 네트워크 전송 속도를 늦출 수 있다. 반면에 불필요한 공백은 코드에 주석을 다는 것과 비슷하지만 덜 분명하게 코드를 눈에 띄지 않게 표시할 수도 있다. 이는 라이선스 또는 저작권 침해를 증명하는 데 바람직할 수 있다. 이는 복사하여 붙여넣기를 통해 이루어졌다.

#### 공백 보존
XML 속성 값에서 공백 문자 시퀀스는 파서가 문서를 읽을 때 단일 공백으로 처리된다. XML 요소 콘텐츠의 공백은 파서에 의해 이런 식으로 변경되지 않지만, 파서로부터 정보를 수신하는 응용 프로그램은 요소 콘텐츠에 유사한 규칙을 적용하도록 선택할 수 있다. XML 문서 작성자는 `xml:space="preserve"` 속성을 요소에 사용하여 파서에게 하위 응용 프로그램이 해당 요소 콘텐츠의 공백을 변경하지 않도록 지시할 수 있다.

대부분의 HTML 요소에서 공백 문자 시퀀스는 단일 단어 간 구분 기호로 처리되며, 이는 단어 사이에 해당 공백을 일반적으로 삽입하는 언어로 텍스트를 렌더링할 때 단일 공백 문자로 나타날 수 있다. 준수하는 HTML 렌더러는 특정 요소에 리터럴 공백 동작을 적용한다.  태그 내부의 요소와 CSS 속성 `white-space`가  또는 으로 설정된 요소이다. 이러한 요소에서는 공백 문자가 단어 간 구분 기호로 "축소"되지 않는다.

미디어위키 마크업에서는  외에 선택적인  태그도 있는데, 이 역시 공백을 보존한다. 이는 Extension:Poem을 필요로 한다.

XML과 HTML 모두에서 줄 바꿈 없는 공백 문자 및 기타 "비표준" 공백은 축소 가능한 공백으로 처리되지 않는다.

### 파일 이름
이러한 사용법은 포함된 공백 코드에 혼동을 일으키는 운영 체제 및 응용 프로그램을 위해 작성된 다중 단어 파일 이름과 유사하다. 이러한 파일 이름은 대신 밑줄 문자(_)를 단어 구분 기호로 사용한다. (예: as_in_this_phrase)

또 다른 그러한 기호는 이었다. 이것은 코딩 양식에 작성할 때 컴퓨터 프로그래밍 초기 몇 년 동안 사용되었다. 천공 카드 작업자는 이 기호를 "명시적 공백"으로 즉시 인식했다. BCDIC, EBCDIC, 및 ASCII-1963에서 사용되었다.

## 같이 보기

* 캐리지 리턴
* 엠 (타이포그래피)
* 엔 (타이포그래피)
* 폼 피드
* 들여쓰기 스타일
* 새줄 문자
* 프로그래밍 스타일
* 모스 부호 프사인
*  (공백 문자 클래스용)
* 스페이스 바
* 공백 (문장 부호)
* Tab 키
* 자르기 (컴퓨터 프로그래밍)
* 화이트스페이스 (프로그래밍 언어)
* 폭 없는 공백

## 각주

## 외부 링크
* 유니코드 문자 데이터베이스 속성 목록

분류:문자 인코딩
분류:소스 코드