| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- HashMap
- 코딩인터뷰
- 자바
- 멀티스레드
- 코딩테스트
- 프로그래머스
- 가비지컬렉션
- 코딩테스트팁
- 자바공부
- 코딩테스트준비
- 자바개발
- 파이썬
- 메모리관리
- 클린코드
- 백준
- 알고리즘
- 정렬
- 객체지향
- 자바기초
- 알고리즘공부
- 자바프로그래밍
- 프로그래밍기초
- 개발자취업
- 개발자팁
- 코딩공부
- 개발공부
- JVM
- Java
- 예외처리
- 자료구조
- Today
- Total
코드 한 줄의 기록
자바 표준 입력·출력 완전 정복: Scanner와 System.out 활용 가이드 본문
자바에서 사용자 입력을 받는 Scanner 클래스와 화면에 결과를 출력하는 System.out을 제대로 이해하고 활용하면, 콘솔 애플리케이션 개발이 훨씬 수월해집니다. 본 글에서는 기초부터 실전 예제까지 상세히 살펴보며, 처음 배우는 개발자도 쉽게 따라올 수 있도록 설명합니다.
왜 입력과 출력이 중요할까?
콘솔 기반 애플리케이션, 알고리즘 문제 풀이, 빠른 테스트 코드 작성 등 다양한 상황에서 표준 입력(Standard Input)과 표준 출력(Standard Output)은 필수입니다.
- 입력을 통해 사용자로부터 데이터(숫자, 문자열 등)를 받고,
- 출력으로 처리 결과를 화면에 보여주죠.
난생처음 자바를 시작할 때, Scanner나 System.out.println()이 익숙지 않아 헤맸던 경험이 있을 겁니다. 이를 빠르게 정리하고 실전에서 바로 써먹을 수 있도록 돕겠습니다.
Scanner 클래스: 콘솔 입력의 핵심 도구
Scanner 생성과 기본 구조
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 처리 코드...
scanner.close();
}
}
new Scanner(System.in): 표준 입력 스트림을 Scanner에 연결- 사용이 끝나면
scanner.close()로 자원 반납
주요 입력 메서드 정리
| 메서드 | 반환 타입 | 설명 |
nextLine() |
String | 한 줄 전체(공백 포함) 읽기 |
next() |
String | 공백 전까지 토큰(단어) 읽기 |
nextInt() |
int | 정수 읽기 |
nextDouble() |
double | 실수 읽기 |
hasNext() |
boolean | 다음 토큰 존재 여부 확인 |
hasNextInt() |
boolean | 다음 입력이 정수인지 확인 |
예제 1: 간단한 문자열·정수 입력
import java.util.Scanner;
public class SimpleInput {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = sc.nextLine();
System.out.print("나이를 입력하세요: ");
int age = sc.nextInt();
System.out.println("안녕하세요, " + name + "님! 당신의 나이는 " + age + "세입니다.");
sc.close();
}
}
nextLine()으로 이름(공백 포함 가능) 읽기nextInt()로 나이(정수) 읽기- 주의:
nextInt()뒤에nextLine()을 사용하면 개행 문자가 남아 예상치 못한 동작 발생 가능
개행 문제 해결하기
nextInt() 후 바로 nextLine()을 쓰면 입력 버퍼에 \n이 남아, nextLine()이 빈 문자열을 반환합니다.
이를 피하려면:
int age = sc.nextInt();
sc.nextLine(); // 버퍼 개행 제거
String comment = sc.nextLine();
System.out: 출력의 모든 것
기본 메서드
System.out.print(Object obj): 개행 없이 출력System.out.println(Object obj): 출력 후 자동 개행System.out.printf(String format, Object... args): 서식(format)에 맞춰 출력
printf로 예쁘게 출력하기
double pi = Math.PI;
System.out.printf("파이 값: %.3f\n", pi); // 소수점 이하 3자리
%d: 정수,%f: 실수,%s: 문자열%.2f: 소수점 이하 2자리로 포맷
예제 2: 표 형식 출력
public class TableOutput {
public static void main(String[] args) {
System.out.printf("%-10s %-5s %-7s\n", "이름", "나이", "점수");
System.out.println("---------------------------");
System.out.printf("%-10s %-5d %-7.2f\n", "홍길동", 20, 88.5);
System.out.printf("%-10s %-5d %-7.2f\n", "이영희", 22, 92.75);
}
}
%-10s: 왼쪽 정렬, 10칸 고정 폭%-7.2f: 왼쪽 정렬, 전체 7칸, 소수점 이하 2자리
실전 예제: 학생 성적 관리 프로그램 만들기
요구사항
- 학생 수 입력
- 각 학생의 이름, 국어·영어·수학 점수 입력
- 총점·평균 계산 후 출력
구현 코드
import java.util.Scanner;
public class GradeManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학생 수를 입력하세요: ");
int n = sc.nextInt();
sc.nextLine(); // 버퍼 정리
String[] names = new String[n];
int[][] scores = new int[n][3];
int[] totals = new int[n];
double[] avgs = new double[n];
for (int i = 0; i < n; i++) {
System.out.printf("[%d번 학생]\n", i + 1);
System.out.print("이름: ");
names[i] = sc.nextLine();
System.out.print("국어, 영어, 수학 점수(공백 구분): ");
scores[i][0] = sc.nextInt();
scores[i][1] = sc.nextInt();
scores[i][2] = sc.nextInt();
sc.nextLine(); // 엔터 처리
totals[i] = scores[i][0] + scores[i][1] + scores[i][2];
avgs[i] = totals[i] / 3.0;
System.out.println();
}
System.out.println("===== 성적표 =====");
System.out.printf("%-10s %-5s %-5s %-5s %-5s %-7s\n",
"이름", "국어", "영어", "수학", "총점", "평균");
for (int i = 0; i < n; i++) {
System.out.printf("%-10s %-5d %-5d %-5d %-5d %-7.2f\n",
names[i], scores[i][0], scores[i][1], scores[i][2],
totals[i], avgs[i]);
}
sc.close();
}
}
주의할 점 & 팁
- 자원 반납:
Scanner사용 후 반드시close()호출 - 입력 예외 처리: 잘못된 타입 입력 시
InputMismatchException발생하므로try-catch블록 활용 - BufferedReader 대비: 고성능이 필요하면
BufferedReader+InputStreamReader조합 고려 - 코드 가독성: 입력 및 출력 로직을 별도 메서드로 분리해 유지보수성 향상
이번 글에서는 자바 표준 입력(Scanner)과 표준 출력(System.out)의 핵심 개념부터 활용 예제, 그리고 실전 학생 성적 관리 프로그램까지 다뤄봤습니다. 반복 연습을 통해 콘솔 입출력 기능을 완전히 체화한다면, 다양한 자바 프로젝트에서 기본기를 탄탄히 다지는 데 큰 도움이 될 것입니다.
Java 기본 자료형과 래퍼 타입: 박싱/언박싱으로 알아보는 핵심 개념과 실무 활용법
안녕하세요! 오늘은 Java를 공부하면서 한번은 꼭 이해해야 하는 기본 자료형과 래퍼 클래스에 대해 함께 알아보겠습니다. 저도 처음엔 "그냥 int 쓰면 되는데 왜 Integer라는 게 따로 있지?"라고 생
byteandbit.tistory.com
'JAVA' 카테고리의 다른 글
| Java 반복문 완벽 가이드: for·while·do-while 그리고 향상된 for 활용법 (0) | 2025.09.26 |
|---|---|
| [완벽 가이드] Java 연산자 종류와 우선순위 총정리 – 산술·비트·논리·비교·삼항 연산자 (0) | 2025.09.25 |
| Java 기본 자료형과 래퍼 타입: 박싱/언박싱으로 알아보는 핵심 개념과 실무 활용법 (0) | 2025.09.23 |
| Java 완전정복! 변수 스코프, final, 상수 패턴 한 번에 이해하기 (0) | 2025.09.22 |
| Java 식별자, 키워드, 주석, 코드 스타일 기본 규칙 완벽 가이드 (0) | 2025.09.21 |