티스토리 뷰
운영체제 마다 서로 다른 줄바꿈 문자를 사용합니다. 대표적으로 Microsoft 계열 운영체제에서는 CR+LF, Unix 계열 운영체제에서는 LF를 사용합니다. Unix계열인 Linux, iPhone, Android 운영체제도 LF를 개행문자로 사용합니다. Windows, Unix 계열 이외에도 여러 운영체제가 존재하며 줄바꿈 문자로 CR만 사용하거나 LF+CR, NL, RS 등 다양한 문자를 사용합니다.
이렇게 운영체제 마다 서로 다른 줄바꿈 문자를 사용하기 때문에, 운영체제가 달라지면 텍스트가 다르게 출력되거나 예기치 못한 프로그램 오류로 이어지기도 합니다. 여기에서는 왜 Windows와 Unix 계열 운영체제가 서로 다른 개행문자를 사용하게 되었는지 소개합니다.
줄바꿈? CR, LF란?
CR과 LF는 타자기에서 유래된 개념입니다. 타자기에서 줄바꿈을 하려면 CR과 LF 동작이 모두 필요합니다. CR은 Carriage Return, LF는 Line Feed을 말합니다. 타자기의 Carriage는 종이를 좌우로 이동시키는 장치를 말하며, Carriage Return은 종이의 가장 왼쪽 편에 글자가 입력되게끔 Carriage를 옮기는 동작을 의미합니다. Line Feed는 글자가 다음 라인에 입력되도록 종이를 올리는 동작을 말합니다.
운영체제 마다 줄바꿈 문자가 다른 이유
초기의 컴퓨터들은 모니터와 같은 비디오 출력 장치를 갖추지 못했습니다. 1970년대 모니터가 연결된 컴퓨터가 보급되기 전까지 컴퓨터들은 주로 전신타자기(Teleprinter)를 입/출력 장치로 사용했습니다. 전신타자기는 타자기와 유사한 형태를 가지고 있으며 컴퓨터와 연결되어 자판으로 명령을 입력 받고 응답을 종이에 출력하였습니다. 이러한 구조는 Command-line Interface라고 불리는 CUI의 초창기 모습이기도 합니다.
[Altair 8800 - Teletype으로 BASIC 실행]
초창기 운영체제에는 장치 드라이버라는 개념이 없었습니다. 따라서 어플리케이션들은 직접 전신타자기와 통신하여 문자를 인쇄하였습니다. 어플리케이션은 줄바꿈이 필요할 때 마다 Carriage Return과 Line Feed 명령어를 전신타자기로 전송해야 했습니다. 그러다 보니 문서의 줄바꿈을 위해 CR과 LF 문자 모두 사용하게 되었습니다. MS-DOS(1981) 운영체제는 호환성을 위해 이러한 개념을 채택하였으며 이 후 MS Windows(1985)도 이를 그대로 계승하게 됩니다.
이와 반대로 1964년 개발된 멀틱스(Multics) 운영체제는 장치 드라이버라는 개념을 도입하였습니다. 멀틱스 운영체제는 줄바꿈 문자로 LF 문자만 사용하였습니다. 장치 드라이버는 이렇게 작성된 문서를 CR+LF형태로 변환하여 전신타자기로 전송하는 역할을 담당했습니다. Unix (1971)는 이러한 개념을 계승하였으며, Unix를 바탕으로 하는 Linux, Android, iPhone 운영체제 모두 줄바꿈 문자로 LF만을 사용하게 됩니다.
References
- Wikipedia NewLine: https://en.wikipedia.org/wiki/Newline
- Wikipedia Teleprinter : https://en.wikipedia.org/wiki/Teleprinter
- Wikipedia Command-line Interface : https://en.wikipedia.org/wiki/Command-line_interface#History
'OS' 카테고리의 다른 글
[윈도우11] 파일 탐색기의 OneDrive 폴더 제거 (0) | 2024.12.19 |
---|---|
[Windows] 환경변수 (1) | 2024.10.15 |
[우분투] 설치 후 주요명령어 (0) | 2020.11.22 |
[OS] 폴더에서 마우스 오른쪽 메뉴가 늦게 열릴 때 (0) | 2017.11.14 |
불필요한 NVidia Driver 파일제거 (0) | 2017.11.14 |
- Xamarin.Forms 요약
- npm
- React
- ASP.NET Core
- Xamarin.Forms eBook
- ios
- .NET Standard
- WPF
- flutter
- TypeScript
- Xamarin
- Android
- VisualStudio
- MS SQL
- StringComparison
- Xamarin.Forms
- Xamarin.iOS
- c#
- Vue
- material-ui
- Total
- Today
- Yesterday