[자바 기초] 3강. 컴퓨터와 대화하기: Scanner로 입력받고 출력하기
지난 시간 복습과 이번 강의 목표
지난 2강에서는 변수를 만들어 데이터를 저장하는 법을 배웠습니다. 하지만 코드를 다시 볼까요?
int age = 30; // 나이가 30살로 고정됨
우리가 코드에 30이라고 적어놓았기 때문에, 이 프로그램은 누가 실행하든 무조건 30살로 인식합니다. 융통성이 없죠.
진정한 프로그램이라면 "당신의 나이는 몇 살입니까?" 라고 물어보고, 사용자가 입력한 값을 받아야 합니다.
이번 시간에는 자바가 제공하는 듣기 도구인 **Scanner (스캐너)**를 사용하여, 사용자와 대화하는 프로그램을 만들어 보겠습니다.
1. 도구 꺼내오기: Import
자바는 수천 가지의 기능을 기본으로 제공하지만, 프로그램이 무거워지는 것을 막기 위해 평소에는 창고(Library)에 넣어둡니다. 우리가 필요한 도구가 있으면 꺼내와야 하는데, 이것을 **import**라고 합니다.
Scanner를 쓰려면 코드 맨 윗줄에 다음과 같이 적어야 합니다.
import java.util.Scanner; // java.util 창고에서 Scanner를 꺼내온다.
public class Main {
// ...
}
💡 선생님의 팁: 인텔리제이에서는
Scanner라고 치고 엔터를 누르면, 알아서import구문을 자동으로 적어줍니다. 참 똑똑하죠?
2. 듣기 도구 준비: Scanner 객체 생성
도구를 꺼내왔으니 이제 사용할 준비를 해야겠죠.
main 메소드 안에 아래 코드를 적습니다. 공식처럼 외우셔도 좋습니다.
// 문법: Scanner 변수명 = new Scanner(입력소스);
Scanner sc = new Scanner(System.in);
new Scanner(...): 스캐너라는 장비를 새로 하나 장만했다는 뜻입니다.System.in: 키보드를 의미합니다. (반대로System.out은 모니터였죠?)sc: 이 스캐너의 이름입니다. 편하게scan,input등으로 지어도 됩니다.
3. 입력받는 방법 (핵심 메소드)
스캐너가 준비되었으니 이제 명령을 내려서 입력을 받아봅시다. 자료형에 따라 명령어가 다릅니다.
sc.next(): 문자열(단어)을 입력받을 때sc.nextLine(): 문자열(문장 전체)을 입력받을 때sc.nextInt(): 정수(int)를 입력받을 때sc.nextLong(): 큰 정수(long)를 입력받을 때sc.nextDouble(): 실수(double)를 입력받을 때
사용 예시
System.out.print("나이를 입력하세요: ");
int age = sc.nextInt(); // 사용자가 숫자를 치고 엔터를 칠 때까지 기다림
System.out.println("당신의 나이는 " + age + "살이군요.");
4. 실전 예제: 반응형 연봉 계산기
자, 이제 배운 걸 다 합쳐서 **"사용자와 대화하는 연봉 계산기"**를 만들어 봅시다. 지난 시간보다 훨씬 그럴듯한 프로그램이 될 겁니다.
src/Main.java 내용을 지우고 따라 해보세요.
import java.util.Scanner; // 1. 도구 수입
public class Main {
public static void main(String[] args) {
// 2. 스캐너 장착 (키보드와 연결)
Scanner sc = new Scanner(System.in);
System.out.println("=== 2026 연봉 계산기 프로그램 ===");
// 3. 이름 입력받기
System.out.print("이름을 입력하세요: ");
String name = sc.next();
// 4. 연봉 입력받기
System.out.print("희망 연봉을 입력하세요(만원 단위): ");
long salary = sc.nextLong();
// 5. 간단한 계산 (세금 15% 가정)
// 만원 단위 입력을 원단위로 변환 (* 10000)
long salaryWon = salary * 10000;
double tax = salaryWon * 0.15;
long finalSalary = salaryWon - (long)tax;
// 6. 결과 출력
System.out.println("\n------------------------------");
System.out.println(name + "님의 연봉 분석 결과입니다.");
System.out.println("세전 연봉: " + salaryWon + "원");
System.out.println("예상 세금: " + (long)tax + "원");
System.out.println("실수령액: " + finalSalary + "원");
System.out.println("------------------------------");
}
}
실행 결과 (직접 입력해 보세요!)
=== 2026 연봉 계산기 프로그램 ===
이름을 입력하세요: 홍길동
희망 연봉을 입력하세요(만원 단위): 5000
------------------------------
홍길동님의 연봉 분석 결과입니다.
세전 연봉: 50000000원
예상 세금: 7500000원
실수령액: 42500000원
------------------------------
5. 자주 발생하는 에러 (주의사항)
초보자가 스캐너를 쓸 때 가장 많이 겪는 에러는 InputMismatchException 입니다.
- 원인: 숫자를 입력받기로 한
nextInt()에 "가나다" 같은 글자를 넣었을 때 발생합니다. - 해결: 사용자가 정확한 데이터를 입력하도록 안내 문구를 친절하게 적어주어야 합니다. (나중에는 예외처리라는 기술로 막을 수 있습니다.)
6. 마무리
이제 여러분의 프로그램은 사용자와 소통할 수 있게 되었습니다. 변수 하나만 알 때는 혼잣말하는 프로그램이었지만, 이제는 사용자의 입력에 따라 결과가 달라지는 **'상호작용(Interaction)'**이 가능해진 것입니다.
하지만 아직 계산 기능이 단순하죠? 단순히 15%를 곱하는 게 아니라, "연봉이 1억 이상이면 세율 20%, 아니면 10%" 처럼 상황에 따라 다르게 계산하고 싶지 않으신가요?
다음 **[4강]**에서는 컴퓨터에게 지능을 선물하는 **연산자(Operator)**와 조건문의 기초를 다지기 위해, 먼저 더하기/빼기 같은 계산 기능부터 확실하게 정복해 보겠습니다.