묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

Java 줄바꿈문자 \n 이란?
프로그래밍/Java

Java 줄바꿈문자 \n 이란?

2022. 2. 17. 12:15

*23.03.31 수정

자바를 쓰다보면 System.out.print("\n"); 을 쓸 때가 있다.

이러면 줄바꿈이 되어 한 줄 밑으로가서 새로운 라인을 추가하게 된다.

즉, "\n"은 개행문자(줄바꿈 문자)인 것이다.

우리가 흔히 쓰는 Enter키처럼 줄을 바꿔주는 문자라고 생각하면 편하다.

실제로 Enter키와 "\n"이 어떤 값으로 쓰이는지 살펴보자.

 

🚀 '\n' 과 Enter키의 인코딩 값

이렇게 실행하고 콘솔에 Enter키를 입력하면 10이라는 인코딩값이 나온다.

'a'는 97이라는 인코딩 값이 나온다.

왜 '\n'와 Enter키는 10이 나오고, 'a'는 97이 나올까?

이것은 해당 문자를 표현하기 위한 인코딩 값이다.

인코딩값은 대부분 1~127까지 똑같으니 아스키코드표를 살펴보자.

 

아스키코드

빨간색으로 되어있는 'a' = 97 과 LF(Line Feed) = 10 으로 나와있다.

즉, 엔터(Enter)를 누르면 LF가 실행되어 줄바꿈이 실행된다는 뜻이다.

이 LF은 자바의 문자에서 '\n'으로 표시된다.

 

🧐 어? 저는 13이랑 10이 나왔어요??

이것은 운영체제마다 줄바꿈 문자가 다르기 때문이다.

  • 윈도우(Windows) : CRLF
  • 유닉스(Unix) 계열 OS (Linux, macOS 등) : LF
  • 맥 (macOS 9 이전 버전) : CR

CR(Carriage Return) 은 줄의 끝에서 시작위치로 돌아간다는 뜻이다. (줄의 시작위치로 이동)

LF(Line Feed)는 커서를 한칸 아래로 이동하여 새로운 라인을 추가한다는 뜻이다. (줄바꿈)

 

그렇다면 위 아스키코드표를 살펴보자.

CR = 13, LF = 10 으로 표기되어 있다.

그래서 운영체제마다 13과 10이 나올때도 아닐때도 있는 것이다.

 

 

 

🧐 OS마다 줄바꿈이 다른데 좀 편한 방법이 없을까요?

이럴 때 쓰는 것이  System.lineSeparator()  이다.

이것은 실행되는 OS의 줄바꿈 문자를 사용하기때문에 모든 OS에서 줄바꿈이 동일하게 사용가능하다.

이렇게 코드를 작성하여 실행해보면 줄바꿈이 된 것을 알 수 있다.

 

 

 

 🧐 lineSeparator()는 어떻게 동작하는 건가요??

저  lineSeparator()  를 Ctrl 또는 command와 함께 누르면 System.java에 작성되어 있는 코드로 가게된다.

번역해보면 다음과 같다.

Returns the system-dependent line separator string.
시스템에 종속된 줄 구분자(line separator) 문자열을 반환한다.
It always returns the same value - the initial value of the system property line.separator.
항상 시스템 소유 줄 구분자(line.separator)의 초기값과 똑같은 값을 반환한다.
On UNIX systems, it returns "\n"; on Microsoft Windows systems it returns "\r\n".
유닉스 시스템에서는 "\n"을 반환하고, 마이크로소프트 윈도우 시스템에서는 "\r\n"을 반환한다.

return : the system-dependent line separator string
반환 : 시스템에 종속된 줄 구분자(line separator) 문자열
since : 1.7
자바 1.7부터 제공되었음

이렇게 읽어보면 우리가 "\r\n" 또는 "\n" 이렇게 OS에 맞게 구분할 필요없이 lineSeparator() 만 쓰면 걱정안해도 된다라는 의미이다.

그런데 중간에 system property line.separator의 초기값과 똑같은 값을 반환한다는데 이것은 무슨 의미일까?

 

 

 

🧐 system property line.separator의 초기값이란?

system property (시스템 프로퍼티) 란 시스템 환경에 관한 정보를 의미한다.

그래서 System클래스의 getProperty() 메서드를 이용한다면 현재 사용하고 있는 OS의 환경 정보를 얻을 수 있다.

이것 역시 System 클래스에서 찾아보면 아래와 같다.

간단하게 번역해보자면 아래와 같다.

Gets the system property indicated by the specified key.
지정한 키로 표시된 시스템 속성(system property)을 가져온다.
parameter : key - the name of the system property.
매개변수에는 시스템 속성의 이름이 들어온다.
return : the string value of the system property, or null if there is no property with that key.
반환값에는 시스템 속성의 문자열 값 또는 해당 키가 있는 속성이 없는 경우 null을 넣는다.

 

 

System.getProperty로 line.separator를 가져와서 줄바꿈을 해보자.

이렇게 줄바꿈이 된 것을 알 수 있다.

 

 

 

📝 결론

System.lineSeparator() 는 OS에 상관없이 줄바꿈을 해주는 메서드이다.

이 메서드의 줄바꿈 값은 system property의 line.separator의 초기값과 동일하다.

그래서 System.getProperty("line.separator")와 동일하게 사용가능하다.

 

차이점이라면 System.lineSeparator()는 자바 1.7부터 제공되었다.

즉, OS에 종속적이지 않은 줄바꿈을 더 간편하게 쓰도록 지원된 것이니 이것을 사용하면 되겠다.

 

 

'\n' 문자는 컴퓨터에서 Enter키를 입력한 것과 동일하다. (OS에 따라서 달라짐)

println() 메서드도 살펴보면 print()으로 문자를 출력하고 System.lineSeparator()로 줄바꿈을 해주고 있다.

 


참고

https://stackoverflow.com/questions/207947/how-do-i-get-a-platform-dependent-new-line-character/10937340#10937340

https://stackoverflow.com/questions/36796136/difference-between-system-getpropertyline-separator-and-n

https://codechacha.com/ko/java-line-separator/

저작자표시 비영리 (새창열림)

'프로그래밍 > Java' 카테고리의 다른 글

Queue 인터페이스  (0) 2022.02.22
List 인터페이스  (0) 2022.02.22
JVM(자바가상머신)이란? - Part 3, ClassLoader  (0) 2022.02.01
자바 getBytes()  (0) 2022.01.28
자바 toCharArray()  (2) 2022.01.28
    '프로그래밍/Java' 카테고리의 다른 글
    • Queue 인터페이스
    • List 인터페이스
    • JVM(자바가상머신)이란? - Part 3, ClassLoader
    • 자바 getBytes()
    묠니르묘묘
    묠니르묘묘

    티스토리툴바