본문 바로가기

우테코/Level1

POSIX new line : 파일 끝에 개행을 추가해야 하는 이유

우테코 1주차 미션을 하다가 POSIX new line에 대한 피드백을 받았다.

 

해당 부분의 코드는 다음과 같다.

       // then
        assertEquals(new ArrayList<>(List.of("carB", "carC")), Service.getWinnerNames(cars));
    }
}

 

처음에는 코드에 대한 피드백이 아니라 당황했고,

POSIX라는 처음보는 단어에 2차적으로 당황했다.

 

그럼 차례대로 알아보자

 

POSIX란?

- Portable Operating System Interface의 약자로 운영체제 사이의 호환성을 위해 IEEE에서 만든 표준

- 소스코드 호환을 위해 표준을 정한 것


       // then
        assertEquals(new ArrayList<>(List.of("carB", "carC")), Service.getWinnerNames(cars));
    }
}

 

내가 작성한 코드에서 문제가 된 것은 파일 끝에 빈 줄(개행)이 되어 있지 않았기 때문이다.

 

즉, 개행(new line)하나가 뭐 문제가 있겠어? 라는 생각이 당연히 들기 마련이지만

그 개행 하나로 호환성에 큰 문제가 발생할 수 있게 된다.

  • 파일 마지막 줄 바꿈은 유닉스에서 관용적으로 사용하던 것이다.
  • 줄 바꿈이 없으면 파일을 올바르게 처리하지 못하는 프로그램들이 있다.
  • POSIX에서 줄 바꿈이 하나의 행을 정의하는 표준으로 정하고 있다.
  • 손상 된 파일을 쉽게 찾을 수 있다.

"파일 끝에 개행"은

실제로도 POSIX에 명확히 명세된 내용이다.

  • Definitions - 3.392 Text File : A file that contains characters organized into one or more lines. The lines do not contain NUL characters and none can exceed {LINE_MAX} bytes in length, including the Although IEEE Std 1003.1-2001 does not distinguish between text files and binary files (See the ISO C Standard), many utilities only produce predictable or meaningful output when operating on text files. The standard utilities that have such restrictions always specify “text files”in their STDIN or INPUT FILES sections.
  • Definitions - 3.205 Line : A sequence of zero or more non- s plus a terminating .

즉, 행의 끝은 개행이며, 텍스트 파일은 행의 집합이며 반드시 개행으로 끝나야 한다.

실제로, 이 컨벤션이 잘 준수되어 있지 않다면 컴파일러도 경고창을 띄운다


 

Intellij에서 개행을 자동으로 추가하는 방법

 

방법

 

step1 :  File > Settings 들어가기

 

 

step2 : Ensure every saved file ends with a line break 검색

: 혹은  Editor > General 에서 찾아보아도 됨

 

 

이제 파일 끝에 자동으로 개행을 추가해준다.