새줄 문자(newline)

서두
윈도우 비쥬얼 스튜디오에서 가끔 저장키를 누를 때 뜨는
이 알림창(아래 스크린샷)은 늘 복잡한 용어로 사람을 헷갈리게 한다.
도대체 뭐하는 얘일까 고민하다 알아보기로 했다.

줄 끝 문자로 선택할 수 있는 옵션은 아래와 같다. (출처: 위키피디아)
LF
CR+LF
CR
RS
POSIX 이전의 QNX


새줄 문자란
가장 우선적으로 알려줄 점은 이 모든 얘기들이 새줄 문자(new line)에 대한 얘기고,

“새줄 문자는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 새줄 문자는 보통 개행 문자, 줄바꿈 문자(line break), EOL(end-of-line)"과 같은 뜻이라고 한다.(출처: 위키피디아)
결국, 개행문자, 줄바꿈 문자, 새줄 문자, EOL은 전부 같은 뜻이다.
이 모든 용어들이 사람마다, 플랫폼마다 다르게 얘기되어 정말 헷갈려 왔다.

새줄 문자는 기종이나 운영체제에 따라 표기하는 방식이나 이 새줄 문자를 나타내는 코드가 다를 수 있는데,
새줄 문자를 표기하는 방식을 나타내는 줄임말이 우리가 많이 들었던 CR + LF, LF, CR, RS 등과 같은 용어들이고,

새줄 문자를 나타내는 코드는 이 방식에 따라, 문자표에 따라 코드값이 다를 수 있다.
예로 들어, 내 컴퓨터는 LF 방식으로 새줄 문자를 표기하는데, 문자코드는 ASCII만 지원한다 하면, 유니코드를 지원하는 기종과는 다른 코드값을 가질 수 있는 것이다.

그러면 이 CR, CR+LF, LF, RS가 왜 탄생하게 되었는지 보자.


탄생 배경
ASCII는 ISO와 ASA(ANSI의 전신)과 동시에 개발했다고 한다. 이 때 텔레타이프가 쓰였는데,
이 텔레타이프는 약간의 제약을 가지고 있었던 것이, 텍스트 한 글자를 오로지 같은 시간 간격으로만 전송할 수 있었다고 한다.
그런데, 프린터의 캐리지(carriage)가 오른쪽 끝에서 왼쪽 끝으로 움직이는 데 걸리는 시간이 두 글자를 인쇄하는 만큼 걸렸다고 한다.
그래서 캐리지가 이동하는 동안 문자 하나가 전송이 되면 프린터는 한 글자를 빼놓고 쓸 수 밖에 없었던 것이다. 그래서 문자 두 글자를 새줄 문자로 두는 CR + LF 방식이 도입되었다.

그 이후에 컴퓨터는 메모리, 디스크(당시에는 엄청 비쌌다고 한다)를 효율적으로 사용하기 위해서 주로 LF를 많이 사용했다.
초기에 등장한 유닉스나 리눅스가 LF 새줄문자를 사용하는 것도 이 이유다.

아래는 유니코드에서의 개행문자 코드표이다.

유니코드 표준은 여러 글자를 줄바꿈 문자로 정의했다. 유니코드를 지원하는 프로그램은 이것들을 한 줄의 끝으로 인식해야 한다.

LF
라인 피드(Line Feed), U+000A
FF
폼 피드(Form Feed), U+000C
CR
캐리지 리턴(Carriage Return), U+000D
CR+LF
연속된 CR과 LF
NEL
다음 줄(Next Line), U+0085
LS
줄 구분자(Line Separator), U+2028
PS
문단 구분자(Paragraph Separator), U+2029


그렇다면, 위 윈도우 창이 뜨면 어떻게 해야 할까?
… 뭐지.. 왜 공부했지..?
플랫폼마다 새줄방식이 다를 텐데, LF로 작성된 텍스트 파일이 CR을 지원하는 OS에서 읽히게 되면, 만약 이 개행문자를 인식하고 알려주는 기능이 없다면, 개행문자를 인식하지 못하고, 전체 텍스트가 한 라인으로 되어 있는 텍스트를 보게 될 것이다.


참고자료
  1. 위키피디아
    https://ko.wikipedia.org/wiki/%EC%83%88%EC%A4%84_%EB%AC%B8%EC%9E%90