알고리즘/기본코드

[입출력]03. 출력과 포멧

  • -

이번 포스트에서는 표준 출력에 대해서 살펴보자.

 

표준 출력

 

표준 출력 메서드

자바에서 표준 출력으로는 PrintStream이 사용되는데 일반적으로 System.out.을 통해서 얻을 수 있다. 다음은 PrintStream에서 출력을 위해 제공되는 메서드이다.

 

메서드  선언부와 설명
print() public void print(Object obj)
obj를 콘솔에 출력한다.
println() public void println(Object x)
x를 콘솔에 출력하고 줄바꿈 한다.
printf() public PrintStream printf(String format, Object ... args)
지시자로 구성된 format에 의거해서 args를 콘솔에 출력한다.

 

 

출력 포멧

마지막에 사용된 printf()는 다양한 포멧문자를 이용해서 문자열을 결합하지 않고 편리하게 식을 만들 수 있게한다. 다음은 printf()에서 사용될 수 있는 형식문자들이다.

지시자 설명
%b 논리값(boolean)
%d 10 진수 정수(decimal integer)
%o 8 진수(octal)
%x, %X 16 진수(hexadecimal)
%f 10 진수 실수(decimal float)
%e, %E 지수형태 표현(exponent)
%c 문자(character)
%s 문자열(string)
%n 줄 바꿈(개행문자)

 

또한 출력되는 데이터의 길이를 지정할 경우 아래의 형식을 따를 수 있다.

형태 설명 사용 예
%nd n 자릿수를 확보하고 숫자를 오른쪽 정렬
빈칸은 공백으로 채움
[%4d], 10 -> [  10]
%-nd n 자릿수를 확보하고 숫자를 왼쪽 정렬 [%-4d], 10 -> [10  ]
%0nd n 자릿수를 확보하고 빈 칸은 0으로 채움
다른 문자를 지원하지 않음
[%04d], 10 -> [0010]
%m.nf 전체 m 자리수로, 소수점 이하 n 자리까지 표현 [%5.2f], 10.1234 -> [10.12]

 

다음은 printf()를 이용한 출력의 예이다. println()과의 차이점을 비교하면서 살펴보자.

private static void printTest() {
	String name = "헐크";
	char gender='남';
	int age=30;
	double height=180.5;
	long n1 = System.nanoTime();
	System.out.println(name+"("+gender+")는 "+age+"세로 키가 "+height+"에 달한다.");
	long n2 = System.nanoTime();
	System.out.printf("%s(%c)는 %d세로 키가 %5.1f에 달한다.%n", name, gender, age, height);
	long n3 = System.nanoTime();
	System.out.printf("+연산: %,d, 포멧: %,d\n",n2-n1,n3-n2); // %,d는 정수 출력 시 천단위 구분자 사용
}

 

println의 경우 문자열과 변수를 섞어서 사용하기 위해 +연산자를 이용해야해서 정신없는 반면 printf는 데어터가 변수로 분리되어있어 해석이 편리하다.

 

 

 

StringBuilder 사용

 

StringBuilder의 필요성

APS를 하다보면 테스트 케이스 마다 여러번 정답을 출력해야하는 경우가 발생하는데 매번 출력을 하게되면 역시 시간을 잡아먹는다. 이런 경우는 출력할 데이터를 한곳에 모아놓은 후 출력하는 것이 유리하다.

이때 단순히 String에 결합시켜서 모아버리면 String은 immutable 하기 때문에 계속 새로운 객체를 생성해버려서 메모리 낭비가 심하게 발생할 수 있다.

 

반면 StringBuilder는 String과 달리 mutable 해서 문자열을 이용한 편집작업이 용이하다. 따라서 출력값을 모을 때는 StringBuilder를 활용하도록 하자.

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.