본문 바로가기

삽질

[Java]System.out.println \n와 \r\n

흔히 자바는 JVM 덕분에 운영체제에 독립적으로 동작된다고 알려져 있습니다.

각 운영체제에 맞는 JVM만 설치하면, 프로그래머 입장에서는 운영체제에 상관 없이 개발할 수 있기 때문입니다.

 

하지만, 운영체제에 따라 같은 코드라도 다르게 동작하는 것이 몇 개 있습니다.

그 중 하나가 System.out.println()입니다.

 

흔히 줄바꿈(띄어쓰기, 개행)의 목적으로 println을 사용합니다.

문장을 출력하고 자동으로 줄바꿈을 하기 때문입니다.

이 줄바꿈는 운영체제 마다 하는 방식이 달라집니다.(운영체제 마다 줄바꿈 문자가 다르기 때문입니다.)

 

제 삽질을 통해 예시를 보여드리겠습니다.

저는 출력을 비교하는 테스트 코드를 작성하고 있었습니다.

 

이 출력을

으로 출력이 정상적으로 이뤄지는지 확인을 하는 코드입니다.

하지만 테스트 케이스는 실패했습니다.

그 이유를 찾기 위해 디버깅을 시도 했습니다.

디버깅을 하니 다음과 같은 결과를 받을 수 있었습니다.

두 개의 차이점이 보이시나요?

마지막 줄바꿈이 \n으로 기대(expected) 했지만, 실제로(actual)\r\n로 출력된다는 것을 알게 되었습니다.

이 것은 제가 윈도우 OS를 사용하기 때문입니다.

윈도우는 줄바꿈을 \n이 아닌 \r\n로 동작을 하기 때문에 제 테스트 케이스가 실패하는 것입니다.

 

이 문제를 해결하는 방법은 간단합니다.

System.lineSeparator()을 사용하는 것으로 줄바꿈을 통일하는 것입니다.

이 코드를 사용하면 각 운영체제에 맞는 줄바꿈 형식으로 변환합니다.