티스토리 뷰

728x90

연료 주입 미션을 보면 예시 테스트 코드에 다음과 같이 System.getProperty()를 사용해 개행문자를 상수로 만들어 사용한다.

public class RentCompanyTest {

    private static final String NEWLINE = System.getProperty("line.separator");
}

당시에는 "개행문자겠구나" 정도로 넘기고 "나중에 알아봐야지~"라는 생각을 했었다. (그때 그때 공부해야하는데 🥲 )
그러다 오찌, 짱구와 코드 부검을 하는 과정에서 오찌가 "OS 마다 개행 출력 문자가 다르다. %n를 사용하는게 좋다."라는 조언을 해줬다. (땡큐 😆 )
이렇게 이 키워드를 두번이나 듣고 나니 드디어 공부를 해야겠다는 마음이 생겼다 👍

OS에 맞춰 개행 문자를 반환해주는 방법은 여러가지가 있다.
하나 하나 살펴보자!! (모두 같은 기능을 제공하니 상황에 맞춰서 사용하면 될 것 같다.)

System.lineSeparator()

Returns the system-dependent line separator string. It always returns the same value - the initial value of the system property line.separator. On UNIX systems, it returns "\n"; on Microsoft Windows systems it returns "\r\n".
Returns: the system-dependent line separator string
Since: 1.7

public static String lineSeparator() {
    return lineSeparator;
}

우리가 자주 사용하는 System.out.println()의 구현코드를 타고 타고 들어가보면 결국에는 여기서도 System.lineSeparator()를 이용함을 알 수 있다.

public void newLine() throws IOException {
    write(System.lineSeparator());
}

System.getProperty("line.separator")

Gets the system property indicated by the specified key.

getProperty()에 개행을 의미하는 키 "line.separator"를 넣어주어 사용한다.

public static String getProperty(String key) {
    checkKey(key);
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
        sm.checkPropertyAccess(key);
    }

    return props.getProperty(key);
}

이때 최종적으로 Properties 클래스getProperty()를 호출해 사용하는데, 보통 Properties 클래스는 시스템 정보를 저장한 properties 파일의 정보를 Map 형식으로 불러와 사용한다고 한다. (이후에 Properties 클래스를 어디에 또 사용하는지 알아봐야겠다.)

%n

String.format()에서 %n는 개행을 의미한다.
따라서 String.format() 인자로 받는 System.out.printf()에서도 %n을 사용해주면 된다.

public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}

앞으로는..

내가 프로젝트의 View에서 System.out을 이용해 어떻게 출력을 하는지 살펴보니 크게 다음의 세가지였다.

앞으로 나만의 방법을 찾아가야겠다 👍

String.format("%d개 일치 (%d원) - %d개\n", rank.matched(), rank.prize(), count);
System.out.println();
System.out.println("당첨 통계");
System.out.println("\n" + dealer.getName() + "와 " + String.join(CARD_DELIMITER, names) + "에게 2장을 나누었습니다.");

Ref.

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

 

 

 

728x90
댓글
공지사항
최근에 올라온 글