2.6 화면 입출력 (Console I/O)
지금까지 우리는 변수에 직접 값을 대입하여 화면에 정보를 출력해보았습니다. 이번 챕터에서는 우리가 원하는 형식으로 문장을 출력 하는 방법과 반대로 사용자(유저)가 키보드로 입력한 값을 읽어다가 변수에 저장 하는 방법을 배웁니다.
1. 서식 있는 출력: printf()
일반적으로 문장 출력 시 System.out.print() 혹은 자동 줄바꿈을 해주는 println()을 많이 사용하지만, 출력하고자 하는 데이터의 포맷(서식)을 깔끔하게 맞추고 싶다면 printf()를 사용합니다.
printf 내에는 형식 지정자(Format specifier) 가 들어가며, % 기호를 사용하여 어떤 종류의 데이터가 어느 위치에 들어갈지를 결정합니다.
// 형식 지정자 표
// %d : 10진수 정수 (Decimal)
// %f : 실수 (Floating-point)
// %s : 문자열 (String)
// %c : 문자 (Character)
int age = 20;
double height = 175.5;
String name = "Alice";
// printf 사용 예 (줄바꿈이 자동으로 되지 않으므로 \n 을 마지막에 붙여줍니다)
System.out.printf("안녕하세요, 제 이름은 %s 며 나이는 %d살입니다.\n", name, age);
// 안녕하세요, 제 이름은 Alice 며 나이는 20살입니다.
// 실수의 소수점 자리수 맞추기 (%.2f 는 소수점 이하 둘째 자리까지 반올림 출력)
System.out.printf("키는 %.1fcm 입니다.\n", height);
// 키는 175.5cm 입니다.
2. 키보드 입력받기: Scanner
자바에서 화면으로부터 값을 입력받는 가장 보편적이고 편리한 클래스는 바로 Scanner입니다.
Scanner 클래스를 사용하려면 이 패키지를 사용하겠다고 자바 컴파일러에게 알려주어야 하므로, 코드 맨 윗부분에 import java.util.Scanner;를 선언해야 합니다.
import java.util.Scanner; // (1) Scanner 클래스 불러오기
public class ScannerEx {
public static void main(String[] args) {
// (2) Scanner 객체 생성 (System.in은 키보드 입력을 의미합니다)
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine(); // (3) 한 줄 전체를 문자로 읽어옴
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt(); // (4) 숫자를 읽어옴
System.out.printf("환영합니다! %s님은 %d세 이군요!\n", name, age);
// (5) 다 쓴 스캐너는 닫아주는 것이 좋습니다.
scanner.close();
}
}
💡 주요 입력 메서드 비교
사용자가 키보드로 어떤 타입의 데이터를 칠지 예측하여, 그에 맞는 메서드를 호출해야 오류가 나지 않습니다.
nextLine(): 공백을 포함하여 '한 줄' 단위로 문자열을 통째로 읽어옵니다. (Enter입력 시 종료)next(): 공백(Space)을 기준으로 '한 단어'만 문자열로 읽어옵니다.nextInt(): 입력받은 값을int정수형으로 즉시 변환하여 읽어옵니다.nextDouble(): 입력받은 값을double실수형으로 변환하여 읽어옵니다.