반응형
운영체제 별로 개행 문자가 다 다르다고 한다.
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);
'◼ JAVA' 카테고리의 다른 글
의존성 주입(DI)이란? (OCP와 DIP를 지키기 위한 방법) (1) | 2024.04.12 |
---|---|
[엘레강스 오브젝트] "생성자에 코드를 넣지 마세요" 내용에 대한 생각 (1) | 2024.04.11 |
[Java] 함수 파라미터에 final 키워드를 꼭 붙여야 할까? (0) | 2024.04.11 |
[Java] 함수형 인터페이스란? 활용 방법에 대해 알아보자 (28) | 2023.11.07 |
IntelliJ 한글화 적용 방법 (0) | 2023.05.31 |