1. 개요
문자 |
의미 |
16진 |
10진 |
8진 |
2진 표현 |
|
CR |
복귀(Carriage Return) |
\r |
0x0D |
13 |
015 |
0000 1101 |
LF |
개행(Line Feed) |
\n |
0x0A |
10 |
012 |
0000 1010 |
캐리지리턴과 라인피드는 텍스트에서 다음 행으로 줄갈이를 할 때 한 줄이 끝났음을 표시하기 위해서 쓰는 특수문자입니다.
이들을 새줄 문자; 개행 문자; 줄바꿈 문자; 행갈이 문자라고도 부르고 영어로는 newline; line ending; end of line (EOL); line break이라고 합니다. 2
이런 종류의 특수문자는 종이에 하나의 기호로 출력되지 않는다는 점에서 전산 용어로 제어문자(control character) 또는 비인쇄문자(non-printing character)라고도 합니다. 3
2. 역사
그런데 궁금한 것은 줄바꿈을 하기 위한 문자가 왜 두 개나 있어야 하는가 하는 점이에요. 캐리지리턴과 라인피드라는 각 문자의 용도와 차이가 있을 것입니다.
결론부터 말하면 줄바꿈을 할 때에 커서가 수평으로 이동하는 것이 캐리지리턴이고 라인피드는 커서의 수직이동을 의미합니다. 그리고 이 말을 이해하려면 타자기의 역사를 알아야 해요.
입력을 한 글자씩 받아서 그 때마다 한 자 한 글자 느리게 출력하던 구식 타자기에는 글자를 종이의 원하는 위치에 찍어낼 수 있도록 좌우로 움직이는 캐리지(Carriage)라는 장치가 있었다고 합니다.
타자기로 글자를 칠 때마다, 이 캐리지가 오른쪽으로 조금씩 이동하면서 종이에 글자를 하나씩 출력하는 것입니다.
이런 구식 타자기에서는 줄바꿈을 위해서 두 단계의 행동이 필요합니다.
첫 단계는 이 캐리지가 수평 왼쪽으로 이동하여 종이의 맨 왼쪽에서 다음 줄의 글자를 찍을 준비를 하는 것입니다. 이 동작을 캐리지가 처음 위치로 돌아온다(복귀한다)고 하여 캐리지 리턴(Carriage return)이라고 부릅니다.
두 번째 움직임은 캐리지가 행의 맨 앞쪽으로 이동한 직후에, 다음 줄로 이동하기 위해서 수직으로 종이를 조금 위로 올리는 것입니다. 이를 라인 피드(Line feed)라고 부릅니다.
그러니까 옛날 타자기에서 줄바꿈이란 캐리지리턴과 라인피드라는 두 가지 동작의 혼합입니다.
오늘날의 문자표에 캐리지리턴과 라인피드라는 두 문자가 존재하는 것은 그런 역사를 반영하고 있습니다 4 5 6 7. 8
3. 결론
타자기가 느려서 줄바꿈을 하기 위해서 2글자를 출력할 만큼의 시간이 필요했던 옛날에는 줄바꿈이 CR과 LF라는 두 제어 문자의 조합으로 이루어졌었습니다.
하지만 오늘날과 같은 디지털 시대에는 둘 중 한 글자만 있어도 줄바꿈을 표현하기에 충분합니다. 그래서 컴퓨터 키보드의 엔터키를 누르면 CR 문자만이 입력됩니다.
여기서 컴퓨터 프로그래머가 알아야 하는 것은 한 가지뿐인데, 이 세상에는 줄바꿈 문자가 2개나 존재하기 때문에 텍스트를 파일로 저장할 때에 시스템(운영체제)별로 줄바꿈의 표현 방식이 다르다는 점입니다. 엄청 헷갈리니까 정리합니다.
- "\r\n"
MS-DOS나 Windows 같은 마이크로소프트의 운영체제에서는 구식 장치와 호환될 수 있도록 텍스트의 줄바꿈을 CR+LF로 표현합니다. 두 문자를 모두 사용해서 용량이 약간 더 커진다는 단점이 있지만 1바이트냐 2바이트냐일 뿐입니다. 가장 근본적이고 전통적인 줄바꿈의 표현 방법입니다. - "\n"
Unix-like 운영체제(Unix, GNU/Linux)에서는 줄바꿈을 LF로만 표현합니다. 키보드의 엔터를 눌렀을 때에 입력되는 것은 CR이지만 텍스트 에디터를 통해 파일에 기록되는 문자는 LF입니다. - "\r"
구형 Mac 운영체제에서는 줄바꿈을 CR로 표현합니다. 또한 운영체제를 떠나서 보통의 키보드 엔터를 눌렀을 때 컴퓨터에 입력되는 문자 데이터도 LF가 아닌 CR입니다.
- 이스케이프 시퀀스 [본문으로]
- https://en.wikipedia.org/wiki/Newline [본문으로]
- https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%AC%B8%EC%9E%90 [본문으로]
- https://en.wikipedia.org/wiki/Newline [본문으로]
- https://kldp.org/node/46637 [본문으로]
- http://ohgyun.com/554 [본문으로]
- https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types [본문으로]
- https://blog.codinghorror.com/the-great-newline-schism/ [본문으로]
'잡담' 카테고리의 다른 글
커플 만들기 (0) | 2018.05.18 |
---|---|
구글 번역 서비스의 한영 번역이 꽤 괜찮다 (0) | 2018.05.15 |
The Clovers - Love Potion #9 [가사 번역] (0) | 2018.01.02 |
Skid Row - In a Darkened Room [가사 번역] (0) | 2017.12.31 |
무선랜과 와이파이 동글 (2) | 2017.11.12 |
플레이리스트: 1991년의 락 히트 (0) | 2017.08.07 |
일본의 제국주의: 동아시아 근현대사 #3 (0) | 2017.06.04 |
엇갈린 근대화의 노력: 동아시아 근현대사 #2 (0) | 2017.06.04 |
꼬깔콘 젤리 (3) | 2017.05.09 |
서양과의 만남과 충격: 동아시아 근현대사 #1 (0) | 2017.05.06 |