자바에서 데이터를 화면에 출력할 때 사용하는 대표적인 명령어는 print(), println(), printf()입니다. 이 명령어들은 System.out 객체를 통해 화면에 출력을 수행합니다.
System.out.print()
System.out.println()
System.out.printf()
print()는 출력 후 줄바꿈 없이 이어서 출력합니다.
System.out.print("Hello");
System.out.print("World!");
출력:
HelloWorld!
줄바꿈 없이 내용을 이어서 출력하기 때문에, 줄바꿈이 필요하면 \n(개행 문자 또는 줄 바꿈 문자)를 사용해야 합니다.
System.out.print("Hello\n");
System.out.print("World!");
출력:
Hello
World!
println()은 print + line의 의미로, 출력 후 줄바꿈을 자동으로 수행합니다.
println()은 줄바꿈을 자동으로 수행하므로, 각 문장을 별도의 줄에 출력할 때 유용합니다.
System.out.println("Hello");
System.out.println("World");
출력:
Hello
World!
printf()는 print + format의 의미로, 형식화된 출력을 위해 사용됩니다. 출력 형식을 지정하는 서식 문자열을 사용할 수 있습니다.
System.out.printf("이름: %s, 나이: %d", "홍길동", 20);
출력:
이름: 홍길동, 나이: 20
주요 서식 코드:
%s: 문자열%d: 정수%f: 실수%n: 줄바꿈예제:
System.out.printf("원주율을 %.2f입니다.%n", 3.14159);
System.out.printf("숫자 %d은 %s입니다.%n", 10, "정수");
출력:
원주율은 3.14입니다.
숫자 10은 정수입니다.
출력은 프로그램 실행 결과를 화면에 보여주는 것이라면, 입력은 프로그램 실행에 필요한 데이터를 사용자로부터 제공받는 것을 의미합니다. 자바에서 대표적인 입력 방법으로는 read()와 Scanner를 사용할 수 있습니다.
read()는 가장 기본적인 입력 방법 중 하나입니다. 하지만 입력받은 값을 ASCII 코드로 처리하며, 한 번에 한 글자만 읽을 수 있다는 제약이 있습니다.
int input = System.in.read();
System.out.println(input);
예제:
1을 입력하고 Enter를 누른 경우:49 (ASCII 코드값)주의:
read()는 한 글자만 읽을 수 있으며, 여러 글자를 입력해도 첫 글자만 처리합니다.read()의 한계를 보완하기 위해 Scanner 클래스를 사용합니다. 이 클래스는 보다 직관적이고 다양한 입력 방법을 제공합니다.
Scanner는 System.in(입력 스트림)을 통해 키보드로 입력된 데이터를 읽습니다. 스트림은 데이터를 한 방향으로 전달하는 통로이며, 입력과 출력이 별도로 존재합니다.
Scanner를 통해 문자열, 정수, 실수 등을 입력받을 수 있습니다. 가장 기본적인 방법은 nextLine()을 사용하여 문자열을 입력받는 것입니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner 객체 생성
System.out.print("입력: ");
String line = sc.nextLine(); // 한 줄 입력받기
System.out.println("출력: " + line);
sc.close(); // Scanner 닫기
}
}
예제:
Hello World!출력: Hello World!Scanner는 다양한 입력 메서드를 지원합니다. 주요 메서드는 다음과 같습니다.
String입니다.int입니다.double입니다.String입니다.import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요: ");
int num = sc.nextInt();
System.out.println("입력한 정수: " + num);
System.out.print("실수를 입력하세요: ");
double d = sc.nextDouble();
System.out.println("입력한 실수: " + d);
sc.nextLine(); // 버퍼 비우기
System.out.print("문자열을 입력하세요: ");
String str = sc.nextLine();
System.out.println("입력한 문자열: " + str);
sc.close();
}
}
nextInt()나 nextDouble() 같은 메서드는 숫자만 읽고, 입력한 줄의 나머지 부분(줄바꿈 문자 등)을 남겨둡니다. 그런데, 그다음에 nextLine()을 사용하면 이 남은 부분을 읽어버려서 예상치 못한 동작이 발생할 수 있습니다.
# 문제가 있는 코드
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력하세요: ");
int number = sc.nextInt(); // 숫자만 읽음
System.out.print("문자열을 입력하세요: ");
String text = sc.nextLine(); // 남아있던 줄바꿈 문자를 읽음
System.out.println("입력한 숫자: " + number);
System.out.println("입력한 문자열: " + text);
123을 입력하고 Enter를 누르면, nextInt()는 123만 읽고, Enter를 의미하는 줄바꿈 문자는 남겨둡니다. nextLine()이 줄바꿈 문자(Enter)를 읽어버려서 문자열 입력을 건너뛰는 문제가 발생합니다.nextLine()을 호출하기 전에 빈 줄을 읽어 버퍼를 비워야 합니다. # 버퍼 비우기를 통해 문제를 해결
int number = sc.nextInt();
sc.nextLine(); // 버퍼 비우기
String text = sc.nextLine(); // 정상적으로 입력 가능
close() 호출:Scanner를 사용한 뒤에는 반드시 close()를 호출하여 스트림 리소스를 반환하는 것이 좋습니다(권장).
사용 용도
read()는 한 글자만 읽을 때 사용하며, 반환값은 ASCII 코드입니다. Scanner는 문자열, 정수, 실수 등 다양한 데이터를 입력받는 데 사용됩니다.편의성
read()는 단순하지만, 여러 글자 입력 처리나 데이터 변환이 번거로워 잘 사용하지 않습니다.Scanner는 다양한 입력 메서드(nextLine(), nextInt() 등)로 편리하게 사용할 수 있어 일반적으로 널리 사용됩니다.