코드 한 줄의 기록

자바 표준 입력·출력 완전 정복: Scanner와 System.out 활용 가이드 본문

JAVA

자바 표준 입력·출력 완전 정복: Scanner와 System.out 활용 가이드

CodeByJin 2025. 9. 24. 07:59
반응형

자바에서 사용자 입력을 받는 Scanner 클래스와 화면에 결과를 출력하는 System.out을 제대로 이해하고 활용하면, 콘솔 애플리케이션 개발이 훨씬 수월해집니다. 본 글에서는 기초부터 실전 예제까지 상세히 살펴보며, 처음 배우는 개발자도 쉽게 따라올 수 있도록 설명합니다.

왜 입력과 출력이 중요할까?

콘솔 기반 애플리케이션, 알고리즘 문제 풀이, 빠른 테스트 코드 작성 등 다양한 상황에서 표준 입력(Standard Input)표준 출력(Standard Output)은 필수입니다.

- 입력을 통해 사용자로부터 데이터(숫자, 문자열 등)를 받고,
- 출력으로 처리 결과를 화면에 보여주죠.
 

난생처음 자바를 시작할 때, ScannerSystem.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자리

실전 예제: 학생 성적 관리 프로그램 만들기

요구사항

  1. 학생 수 입력
  2. 각 학생의 이름, 국어·영어·수학 점수 입력
  3. 총점·평균 계산 후 출력

구현 코드

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

 

반응형