문자열에는 이스케이프 문자라는게 있다.
Escape Codes 혹은 Escape Sequence 라는 한글로 번역하면 탈출 문자, 탈출 시퀀스라고 한다.
Escape Squence 가 처음 도입된 것은 C와 C++ 언어였고 파이썬도 영향을 받았다.
Escape는 그냥 말 그대로 문자열 안에서 탈출한다는 의미로 보면 되지만 이 문서는 그것을 좀 더 자세히 알아보기 위한 포스팅이다.
Python 의 예제로 알아본다.
print("Escape Sequence")
print(Escape Sequence)
첫번째 print는 문자열을 콘솔에 출력하고
두번째 print는 에러 메시지를 출력한다.
파이썬은 " " 큰 따옴표나 ' ' 작은 따옴표 안에 있는 것은 문자열로 인식하고, 그냥 단어는 식별자 identifier 로 인식하기 때문이다.
두번째 문장에서 파이썬이 지적하는 부분은 2가지다. 첫번째로는 , 콤마가 없는 것이고 콤마를 찍었다면 두번째는 정의되지 않는 식별자이다. 파이썬 번역기는 단계적으로 실행되기 때문에 한개의 오류를 해결하면 그 다음 오류로 간다.
" " 따옴표 바깥의 영역은 살펴봤으니 안쪽으로 들어가 보자.
간단하게 문자열안에서 줄바꿈을 해보자.
print("Escape Sequence."
"This is second line.")
결과는 그대로 이어져 나온다. 이런 경우 어떻게 해야할까?
... 라는 질문에 답하기 위해서 이스케이프 코드가 만들어졌다.
print("Escape Sequence.\nThis is second line.")
print 함수가 따옴표안의 문자열을 읽는 것은 표준 출력에 출력하기 위함이다. 문자열은 아스키코드나 유니코드나 연속적으로 읽도록 되어 있다. 문자열이 저장되어 있는 메모리의 첫 바이트부터 문자열의 종료가 표시된 마지막 바이트 '\0' 까지 순차적으로 읽어나간다. 언제 줄을 띄워야 하는지 문자열에는 정보가 없다. Escape 문자열 \n 을 사용하면 문자열을 잠시 탈출해서 다른 할일을 하고 다시 문자열로 돌아온다.
여기서 \ 백슬래시의 역할은 print 함수가 문자열을 읽다가 \ 백슬래시를 만나면 일단 정지한 후 그 다음에 있는 문자에 따라서 다른 지시를 내릴 수 있다. 몇몇 Escape 코드는 Ascii 코드에 정의되어 있는 코드도 있다. 시스템에 따라 사용하지 않는 몇몇 코드를 제외하고 일반적인 코드는 \n을 비롯해서 다음과 같다.
이스케이프 코드 (Escape Code) | 내용 |
\n | 아래로 줄바꿈. 맨 앞으로 간다. Line Feed |
\t | 수평으로 탭한다 Tap |
\r | 현재 줄의 맨 앞 글자로 이동 (Cariage Return) |
\b | back slash 한칸 앞을 지운다. |
\' | ' 작은 따옴표를 문자열로 바꾼다 |
\" | "" 큰 따옴표를 문자열로 바꾼다 |
\\ | \ 백슬래쉬를 문자열로 바꾼다 |
\x00 | 16진수 문자형 반환 \x41 : 65 ('A') |
\\ 이런 건 좀 생소해보이는데 문자열안에서 \ 를 만나면 이스케이프 하기 때문에 탈출하지 말라고 붙이는 거다. \" \'도 마찬가지다. 문자열 그대로 사용하고 싶을 때는 \를 붙여준다. 개중에는 \를 써도 문자열로 출력되는 경우가 있는데 좋은 습관이 아니다. \를 사용하고 싶으면 \\를 사용하는 습관을 들이는게 좋다.
특히 윈도우 디렉토리는 \ 백 슬레시로 구분하는데 리눅스는 / 그냥 슬레시로 구분하기 때문에 윈도우에서 쓸일이 많다.
* 탭 코드와 문자형 반환의 예
print("Escape Sequence.\tThis is \second line.\x41")
텍스트 에디터는 텍스트 파일(txt)을 읽을 때 이것들을 만나면 적절한 처리를 해준다. 텍스트 파일에는 보이는 문자만 들어있는게 아니다. 안보이지만 이런 이스케이프 코드도 들어있다. 에디터에 따라 이스케이프 코드를 적용할 수도 있고 무시할 수도 있다. 좋은 에디터는 이런 문자 코드를 자동적으로 인식하여 최대한 사용자 편의적으로 지원하는 에디터다. 현대의 IDE (통합개발환경)는 훌륭한 툴이 많이 있다. (VSC, PyCharm, Ecplipse 등등)
이스케이프는 텍스트 출력환경 (CLI)에서 많이 쓰긴하지만 알아두면 유용하게 쓸 수 있다.