-
[C#] \r은 뭐하는 놈일까?개발 2023. 7. 22. 16:44
Carriage return(https://en.wikipedia.org/wiki/Carriage_return)
CR이라고도 불리는 carriage return 타자기(종이에 활자를 찍어내는)에서 주로 사용하는 control caracter이다.위키에서 발췌한 정의는 위와 같다. 시대가 지나갈 수록 타자기라는 기계를 접해보지 않은 사람은 더욱이 위의 용도는 무엇인지 그리고 왜 저런것이 필요한지 모르는 것이 정상이다. 나 역시 타자기를 한번도 접해보지 않았고 \r 이 무엇인지 확인하는 중에 알게되었으니 말이다.
타자기는 어떻게 동작하는걸까?
carraige return이라는 것을 알기위해서는 타자기 동작방식을 이해하면 좀 더 쉽게 왜 carriage return이라는 것이 필요한지 알 수있다. 먼저 타자기는 키보드와 같이 나열되어있는 글자를 누르면 그 글자에 해당하는 먹대(잉크를 바르는 활자)가 종이에 튕기면서 글자를 찍어낸다. 그리고 타자기는 다음 글자를 찍어내기 위한 좋은 위치로 종이를 움직이게 되는데 이 작업을 해주는 것이 바로 carriage이다.
그리고 타자기는 수동 자동으로 나뉘게 되는데 자동의 경우 이 carriage return을 이용해 carriage로 먹대의 위치를 종이의 시작부분으로 움직이도록 해주는 것이다!
(수동 타자기, 왼쪽 손잡이를 당겨 종이의 좌측으로 옮기는 행위 = carriage return)
그렇다면 CLI 환경에서 \r은 어떻게 동작하는걸까?
흔히 이전에 작성된 코드를 보다보면 \r\n을 함께 쓰는 것을 볼 수 있다. 이를 수동타자기의 방법대로 생각해보면 다음줄로 이동하기 위해 종이를 내리고(\n, Line Feed) 먹대의 위치를 종이 가장 좌측으로 옮기는 행위를 나타낸 것으로 알 수 있다. 하지만 요즘의 대부분의 CLI 환경에서 \n(Line Feed)만으로도 \r\n의 동작을 할 수 있도록 환경을 제공하고 있다.
NodeJS에서 패키지를 설치하다보면 CLI 환경이지만 굉장히 동적인 모습을 나타내곤 한다.
이러한 콘솔 Output은 모두 \r 을 이용한 작품들이다. 위의 이미지는 아래의 코드로 동작한다.
// C#string[] symbols = { "-", "\\", "|", "/" };System.Console.WriteLine();for (int i = 0; i < 10; i++){foreach (string c in symbols){System.Console.Write($"\rInstalling........{c}");Thread.Sleep(400);}다른 환경에서는 시도해보지 않았지만 \r을 이용한다면 어떠한 환경에서도 위와같은 멋진 콘솔 Output을 만들 수 있을 것이라 생각한다.