멈재

[크라운드] #2, 파일 끝에 개행을 추가하세요 x 10 본문

크라운드

[크라운드] #2, 파일 끝에 개행을 추가하세요 x 10

멈재 2023. 5. 29. 22:03
728x90

크라운드 첫 번째 글에 이러한 내용을 작성했었다.

... 문제와 해결에 정보를 더한 양질의 내용으로 적어야 하지 않을까란 고민 때문에 포스팅까지 이어지는데 꺼려졌다.
지금은 그래도 일단 쓰자란 생각이 강하게 들어서 부족한 내용을 담더라도 쓰는 것을 중점으로 두려고 마음을 다잡았다.

 
그러나
너무 간단한 고민인 건 아닐까?
너무 당연한 내용은 아닐까?
내용이 너무 짧은 건 않을까?
라는 생각에 주저하게 되었고, 그렇게 대략 20개의 부채가 쌓여버렸다..

 
지금에서는 귀찮고 미뤄서 못쓴다기보다 시간적인 여유가 없어서 못쓰는게 크다.
 
그래도 차근히 지워나가려고 한다.
 


 
크라운드 1편에서 정적 도구로써 코드 리뷰 봇을 도입했다고 소개했는데, 요 녀석이 가끔 이러한 리뷰를 해주었다.

 
단순히 가독성을 위해 이러한 리뷰를 남겨주는건가 싶어 대수롭지 않게 넘겼지만 잊을만하면 파일 끝에 빈 줄을 추가해야 한다는 리뷰 내용이 있었다.
 
이전에 컨벤션과 관련된 포스팅으로 네이버 핵데이 Java 코딩 컨벤션을 본 기억이 있어서 찾아보게 되었는데 가장 서두 1. 파일 공통 요건에 '파일의 마지막에는 새 줄'이라는 내용이 존재했다.

출처:https://naver.github.io/hackday-conventions-java/#newline-eof

 
다만 이 컨벤션 링크에는 저렇게만 나와있어서 다른 포스팅을 찾아보게 되었고, 개행을 해야 하는 이유를 알게 되었다.
 
이유는 다음과 같다.
참고로 다음에 설명할 <newline>은 개행 문자를 의미한다.

3.238 Newline Character (<newline>)
A character that in the output stream indicates that printing should start at the beginning of the next line. It is the character designated by '\n' in the C language. It is unspecified whether this character is the exact sequence transmitted to an output device by the system to accomplish the movement to the next line.
링크: https://pubs.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_238

 

3.195 Incomplete Line
A sequence of one or more non- <newline> characters at the end of the file.
링크: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_195

번역하면 '파일 끝에 한 개 또는 한 개 이상의 non-<newline>인 경우 불완전한 라인으로 인식한다'는 것이다.

 
반면 행(라인)은 어떠한 기준을 가질까

3.205 Line
A sequence of zero or more non- <newline>s plus a terminating <newline>.
링크: https://pubs.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_205

번역하면 '0개 이상의 non-<newline>에 <newline>이 추가되어 끝나면 라인으로 인식한다'는 것이다.
두 문단을 쉽게 말하면, 개행이 없다면 완벽한 행이 아니고, 행이라는 단위는 개행 문자를 기준으로 만들어진다고 할 수 있다.
 
행이라는 개념을 완전한 행과 불완전한 행으로 개념을 잡은 이유는 텍스트 파일은 하나 이상의 행으로 이루어진 파일이기 때문이다.

3.392 Text File
A file that contains characters organized into one or more lines. ...

 

왜 이러한 개행 문자가 추가돼야 할까?

운영체제 또는 도구에 따라 하나의 파일로 인식할 수 있기 때문이다.
즉, 잠재적인 문제를 방지하기 위함이라고 볼 수 있다.
 
한 가지 예시를 들어보겠다.

테스트 환경
운영체제: 윈도우 10
쉘: Git Bash, Power Shell

우선 UNIX 환경의 쉘인 Git Bash로 다음의 예시를 적용해봤다.
 
a.html과 b.html 파일 각각에 내용으로 h1 태그 안에 파일명을 넣어놓았다.

참고로 각 파일에는 개행이 존재하지 않는 한 줄로 구성되어 있다.
 
cat 명령에 파일 형식을 적어 두 개의 파일이 함께 출력되게 하면 다음과 같은 결과가 나오는 것을 알 수 있다.

git bash 예시

파일 내에 개행이 존재하지 않아 파일 간의 차이를 알기 어렵다.
 
Power Shell에서는 어떤 결과가 나올까

powershell 예시

이때에는 서로 개행되는 결과를 얻게 된다.
이처럼 환경에 따라 서로 다른 결과를 얻게 되는 문제가 발생할 수 있다.

따라서 잠재적인 문제가 발생하지 않으려면 파일 맨 마지막에 개행을 추가하는 습관을 들여야 하는 것을 알 수 있다.

a.html과 b.html에 개행을 추가했을 때의 결과

 
 
참고