Coded by Juny

콘솔 입출력 본문

Study/Java

콘솔 입출력

Juny_Choi 2023. 11. 17. 18:37

Java에서는 콘솔에 값을 출력하고 값을 입력받기 위해 특정 메서드들이 필요하다. 값을 입력받는 메서드와 출력에 필요한 메서드들을 알아보자.

 

전공자라면 무조건! 보았을 문구 Hello, world!

 

위 사진은 자바를 처음 배웠다면 거의 대부분이 봤을 법한 문구이다. 우리가 자바를 배울 때 가장 처음 콘솔 출력창에 메시지를 출력하는 방법을 배울 것이다. 그냥 쓰면 안되나 싶기도 하지만 값을 출력하고 입력장치로 값을 입력받을 땐 특정 메서드들이 필요하다.

 

 

 

콘솔 출력

프로그래밍을 하며 변수에 담긴 값을 확인하고자 할 때, 콘솔에 출력할 수 있는데 이때 우리는 주로 System.out.print(), System.out.println(), System.out.printf() 메서드를 활용한다. 각 뜻은 천천히 살펴보자

 

System.out.print( )

해당 메서드는 괄호 안의 내용을 단순히 출력만 하며 줄바꿈 또한 지원하지 않는다. 예를 들어 다음 3줄의 코드가 있다고 가정해보자.

public class Main {
    public static void main(String[] args) {
        System.out.print("Hello world!");
        System.out.print("Juny" + "Tistory");
        System.out.print("Code");
    }
}

 

 

콘솔을 살펴보면 줄바꿈과 띄어쓰기 없이 문자열들을 출력했다. 해당 메서드는 콘솔에서 줄바꿈 하지 않고 오른쪽으로 값들을 붙여서 나열한다.

 

System.out.println( )

해당 메서드는 값을 출력하고 나서 그 뒤에 줄바꿈을 하는 메서드로 뒤에 붙은 ln은 line을 의미한다. 같은 값으로 예시 코드를 적어보면 다음과 같다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        System.out.println("Juny" + "Tistory");
        System.out.println("Code");
    }
}

 

모든 값들이 코드 줄별로 줄바꿈이 되어있는 것을 알 수 있다. 값을 출력하고난 다음 커서를 다음 줄로 옮기므로 마지막에 Code를 출력하고 한 줄이 비어있는 것을 알 수 있다.

 

System.out.printf( )

해당 메서드는 변수의 값을 여러 형식으로 출력하게 끔 도와주는 메서드로 f는 formatted의 약자이다. 지시자를 이용해 여러 변수들을 어디에 위치시킬지 정한 후 어떤 변수들을 넣을 것인지 설정할 수 있게 도와주는 메서드다. 우선 코드 설명 전에 지시자에 대해 살펴보자.

 

지시자 출력 포멧
%b 불리언
%d 10진수
%o 8진수
%x, %X 16진수
%c 문자
%s 문자열
%n 줄 바꿈

 

해당 표는 지시자들을 의미하며 변수의 데이터 타입에 맞는 지시자를 써야한다. 예시 코드를 살펴보겠다.

public class Main {
    public static void main(String[] args) {
        System.out.printf("%s%n", "Hello, world!");
        System.out.printf("%s%n", "Kim" + "Coding");
        System.out.printf("%d%n", 2+8);
        System.out.printf("지금은 %s입니다", 2023 + "year");
    }
}

 

지금 까지 봐웠던 두 메서드와 달리 해당 메서드는 매 번 바뀔 수 있는 변수를 문자열 안에 지시자를 통해 넣어줌으로 써 매 번 값을 바꿔야하는 상황에서 출력 메서드 내용을 바꾸지 않고 변수만 수정해주면 된다는 장점이 있다. 

 

 

 

콘솔 입력

값을 입력장치를 통해 입력할 때는 Scanner 클래스를 이용하게 된다. 사전 작업이 필요한 만큼 사전작업은 코드를 통해 알아보겠다.

import java.util.Scanner;

Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성
String input = scanner.nextLine();   // 입력한 내용이 inputValue에 저장

System.out.println(input);           // 입력한 문자열이 출력

 

우선 Scanner 클래스를 불러온 후, Scanner 클래스의 인스턴스를 두 번째 코드에서 생성한다. 그 후 scanner인스턴스를 통해 입력 받은 값을 문자열 input변수에 담아준다. 3번 째 코드에서 nextLine( ) 메서드는 여러 줄의 입력이 있을 때 그 해당 줄의 모든 값을 불러온 후 줄바꿈을 하는 메서드이다. 해당 설명은 코딩 테스트를 진행하며 정리한 부분이 있으니 아래 블로그를 참고해서 더 살펴봐도 좋다.

 

2023.11.16 - [Coding & Algorithm/Baekjoon] - A+B - 6

 

A+B - 6

문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가

dydwns9436.tistory.com

 

nextLine( )은 한줄의 문자열로 입력받는 메서드이고, 이 밖에도 정수형이나 실수형 등으로 받아오는 메서드도 있다.(nextInt( ), nextLong, nextFloat( ) 등)

 

 

 

Bufferedwriter( ) / BufferedReader

해당 메서드들은 위에서 배웠던 출력과 입력에 관한 메서드이지만 차이점이 한 가지 있다. 해당 메서드들은 버퍼를 사용한다는 점인데, 버퍼란 잠시 값을 저장하는 임시공간이라고 보면 된다. 이러한 버퍼를 이용해 매 번 입출력을 하지 않고 한번에 연산하여 값을 출력하고 입력되므로 시간이 굉장히 빠르다는 장점이 있다.

 

우선 해당 메서드들을 사용하기 위해선 java의 입출력 메서드들을 호출해줘야 한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

 

 

 

BufferedReader( )

해당 메서드는 Scanner와 유사하게 입력을 담당하는 메서드이다. 해당 메서드를 사용하기 위해서는 다음과 같은 과정을 거친다.

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
int i = Integer.parseInt(bf.readLine());

 

BufferedReader 클래스에서 인스턴스를 생성해주고 입력 받은 값을 String s에 넣어준다. 해당 메서드들의 특징이라 하면 입력 받을 때 값을 항상 문자열로만 받을 수 있다는 번거로움이 있다. 그래서 항상 원하는 데이터 타입으로 사용하기 위해서는 타입변환을 해주어야 한다.

3번 째 코드에서 s의 데이터를 정수형으로 변경해주었다. 

 

또한 readLine( )을 사용할 때 데이터의 입출력 예외처리를 위해 트라이 캐치문이나 throws IOException을 사용해주자. readLine( )으로 읽은 데이터는 줄 단위로만 한 라인 단위로 데이터를 받게되면 사이에 공백으로 구분되는 데이터들이 모두 읽어질 수 있다.

 

이 때 String Tokenizer( )을 통해 넣어야할 변수들에 parseInt(변수.nextToken( ))을 활용하거나 split( )함수를 이용해 원하는 값을 저장해주자.

// 1. StringTokenizer( ) 사용
StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

// 2. split( ) 사용
String array[] = s.split(" ");

 

 

 

Bufferedwriter( )

해당 메서드는 System.out.print( )와 유사한 출력 메서드이다. 위에서 설명했듯 버퍼를 사용해 값을 임시 저장하고 한번에 쏟아내는 방식이기 때문에 한번에 데이터를 출력하는 메서드인 flush( )를 사용해주어야 한다. 또한 해당 메서드는 줄바꿈을 지원하지 않으므로 사용자가 직접 \n을 통해 줄바꿈을 원하는 곳에 해주어야 한다.

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String result = "Juny"; 
bw.write(result + "\n"); 
bw.flush();
bw.close(); // 마지막엔 close( )를 이용해 해당 메서드를 잠궈주는 것이 좋다고 한다.

'Study > Java' 카테고리의 다른 글

클래스와 객체  (0) 2023.11.29
제어문  (1) 2023.11.22
연산자  (0) 2023.11.16
문자열 타입  (1) 2023.11.12
Java의 변수와 타입  (0) 2023.11.10