전개발
article thumbnail

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를 사용하는 것이 효율적인 알고리즘을 짜는데 유리할 것으로 생각됩니다.

profile

전개발

@전개발

프론트엔드 개발자, 전인혁(Jeonny) 입니다.
포스팅이 좋았다면 "공감❤️" 과 "댓글👍🏻" 부탁드립니다. 😊