자바는 백슬래시( \ ) 와 따옴표 ( '' ) ( "" ) 는 문자 그대로 출력되지 않는다.
왜냐하면 출력문은
System.out.print("hi");
처럼 쌍따옴표 안의 내용을 출력하기 때문에, 중간에 " 가 나오면 거기서 내용이 끝나는 거라고 인식하기 때문.
그래서 따옴표를 쓸 때 \" \' 처럼 앞에 백슬래시를 써주면, 자바는 자동으로 \ 다음의 문자를 인식해 상황에 맞게 처리한다.
이를 이스케이프 시퀀스 (escape sequence) 라고 한다.
문자로 백슬래시 자체를 쓰고 싶은 경우 \\ 이렇게 두 번 적어주면 된다.
이스케이프 시퀀스로 지정된 특수한 사항은 아래 표로 확인할 수 있다.
1. 특수문자 출력표
괄호와 슬래시는 단독으로 쓰일 수 있는 특수문자이다.
그래서 백슬래시를 붙이면 error로 출력되지 않는다.
입력 | 출력 |
\ | error |
\\ | \ |
\' | ' |
\" | " |
( | ( |
\( | error |
/ | / |
\/ | error |
2. 특수 기능 문자
입력 | 출력 |
\n | 줄바꿈 (LF) |
\r | 줄의 맨 처음으로 (CR) |
\t | 탭. 들여쓰기. |
\b | 커서를 한 문자 앞으로 (백스페이스) |
\0 | 빈칸 (null) |
* Line Feed (LF)
: 커서를 현재 행의 다음 행으로, 즉 아래로 내리기
아스키 코드: 16진수로 0A (10)
* Carriage Return (CR)
: 커서를 현재 행의 맨 좌측으로 옮기기
아스키 코드: 16진수로 0D (13)
LF -> CR 하면 행갈이가 된다. (타자기 원리)
운영체제별로 "엔터" 역할을 하기위해 둘 다 필요하기도 하고 하나만 필요하기도 하다.
▼ 자세한 내용은 아래 글 참조
Q. 의문점
System.out.println("!@#$%^&*(\\'\"<>?:;");
System.out.println("!@#$%^&*(\\\'\"<>?:;");
// !@#$%^&*(\'"<>?:;
이 두 가지 출력문의 결과물이 같다. 왜..?
(\' 를 출력하기 위해서는
출력 | 입력 |
( | ( |
\ | \\ |
' | \' |
=> (\\\'
이렇게 세 개의 백슬래시가 필요한데...
이번 출력값의 경우, "" 는 쌍으로 겉에 이미 있기 때문에 가운데에 쓸 경우 \ 가 필요했지만
' 의 경우 단독으로 쓰여 컴퓨터가 처리하기에 오해가 없는 상황이기에
백슬래시 없이 단독으로 쓰여도 잘 나온 것 같다.