Java에서 알고리즘을 풀 때, 혹은 필요한 경우에 콘솔에 메시지를 출력해야합니다.
자주 사용되는 두 가지 방법이 있습니다.
System 클래스의 println(); 메소드 활용
System.out.println("Hello Inhyeok !");
우선, System 클래스는 자바에서 표준 입/출력을 담당하는 클래스입니다.
System 클래스에는 in, out, err과 같은 클래스 변수가 정의되어 있습니다.
그 중, System.out은 표준 출력 스트림으로, print();, printf();, println() 메소드는 이러한 스트림을 콘솔에 출력해주는 메소드입니다.
print(); vs printf(); vs println(); ?
print();와 printf();의 차이는 출력 양식(format) 지정의 가능 유/무입니다.
print();는 괄호 안의 내용을 그대로 출력하지만, printf();는 %d, %s와 같은 서식 지정자를 활용해 출력 형태를 지정할 수 있게 해줍니다.
System.out.print("전인혁"); // 전인혁
System.out.print("전인혁 %d세"); // 전인혁 %d세
System.out.printf("전인혁 %d세"); // Error : Format specifier '%d' - 서식 지정자에 대한 매개변수가 없어서 오류.
System.out.printf("전인혁 %d세", 26); // 전인혁 26세
print();와 println();의 차이는 개행(\n) 여부에 있습니다.
print();는 개행없이 그대로 붙여서 출력하고, println();은 끝에 개행문자(\n)가 붙어서 출력 후 개행합니다.
// 1. print();
for(int i=0; i< 3; i ++){
System.out.print(i);
}
/*
012
*/
// 2. println();
for(int i=0; i< 3; i ++){
System.out.println(i);
}
/*
0
1
2
*/
java.io.BufferedWriter 클래스
BufferedWriter 클래스 역시, 입력에 쓰였던 BufferedReader와 똑같이 입/출력 에러 발생 시 IOException을 던지도록 정의되어 있기 때문에, throws IOException을 통해 예외처리를 해주어야 합니다. 아래 예제에서는 main에 추가해주었습니다.
아래의 메소드들을 활용해, 콘솔 출력을 수행합니다.
- write(); : 버퍼에 출력할 내용을 담는 역할을 합니다.
- flush(); : 버퍼에 담은 내용을 한번에 출력하고, 버퍼를 비우는 역할을 합니다.
- close(); : 출력이 끝난 후, 스트림을 닫는 역할을 합니다.
import java.io.BufferedWriter; // BufferedWriter 클래스 사용을 위해선 import 해주어야 합니다.
import java.io.IOException; // IOException import
import java.io.OutputStreamWriter;
public class test {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("자바왕이 되고픈 전인혁");
bw.flush();
bw.close();
}
}
어느 것을 써야할까?
System.out.println();는 사용하기 편하다는 장점이 있지만, BufferedWriter 방법에 비해 속도가 현저히 느리다는 단점이 있습니다.
언어와 출력 방법 별 속도 비교 by. 백준님
예외처리, import 등이 귀찮더라도, BufferedWriter를 사용하는 것이 효율적인 알고리즘을 짜는데 유리할 것으로 생각됩니다.
'Java' 카테고리의 다른 글
[Java] String.format();으로 출력 서식 지정하기 (0) | 2023.01.18 |
---|---|
[Java] 문자열 클래스 - String과 StringBuilder (0) | 2023.01.11 |
[Java] System.gc();와 Garbage Collection (0) | 2023.01.09 |
[Java] Scanner와 BufferedReader로 콘솔에서 입력 받기 (0) | 2023.01.07 |