[Java] 개행 문자 사용시 주의점 (OS별 개행문자 통일하는 법)

운영체제 별로 개행 문자가 다 다르다고 한다.

Window \r\n
Unix \n
Mac \r

오래전 Mac OS의 경우에는 "\r" 개행 문자를 사용했지만 현대의 Mac OS는 Unix기반으로 "\n" 개행 문자를 사용한다고 한다.

운영체제별로 다른 개행 문자가 뭐가 문제야?

 

Git 통해 협업 시

하나의 프로젝트를 여러 사람들이 작업할 때 다양한 운영 체제에서 개발된 코드가 저장소에 저장될 것이다.

하지만 운영체제에 종속적인 개행문자가 저장소에 올라간다면 개행문자 하나 때문에 불필요한 변경사항이 발생할 수 있고

코드를 비교해 병합하는 과정을 어렵게 만들 수도 있다.

 

호환성 문제

위 처럼 협업하는 상황에서 병합이 정상적으로 이뤄진 소스코드를 들고와서 추가작업을 한다고 가정했을 때

이 병합된 소스코드가 Window에 종속적인 코드이고 자신의 로컬은 Mac이라면

줄바꿈이 제대로 표시되지 않아 운영체제별로 다른 내용이 보일 수 있다.

 

배포

애플리케이션을 배포 할 때 여러 운영체제에서 동일하게 작동할 것을 기대할 수 있다.

하지만 이러한 운영체제에 종속성을 가지는 코드로 인해 운영체제별로 다르게 동작한다면 디버깅 과정이 복잡해 질 수 있을 것이다. 

 

개행문자가 운영체제에 의존하지 않게 하려면?

 

System.lineSeparator()

운영체제에 종속적이지 않도록 하기 위해 시스템 정의 상수인 System.lineSeparator()를 사용할 수 있다.

System.out.println(line1 + System.lineSeparator() + line2 + System.lineSeparator() + line3);

하지만 System.lineSeparator()로 개행시에 코드 라인이 너무 길어진다는 단점이 있다.

 

%n

위 코드 라인이 길어진다는 문제를 String.format()의 %n 문자를 사용해서 해결할 수도 있다.

%n을 사용하면 운영 체제의 줄바꿈 규칙으로 자동 변환해준다고 한다.

System.out.printf(%s &n %s %n %s, line1, line2, line3);