
2025년 1월 1일 잔디 심기
오늘의 공부
지금까지 학습한 변수, 연산자, 조건문, 반복문은 프로그래밍의 가장 기본이 되는 기능이다. 대부분의 프로그램 언어는
이 기능을 필수로 가진다. 그리고 프로그래머가 하는 일의 대부분은 지금까지 설명한 변수, 연산자, 조건문, 반복문을 다루는 일이다. 그래서 이 기능을 잘 다루는 것이 무엇보다 중요하다.
이번 시간에는 지금까지 배운 내용들을 훈련하는 시간이다. 여러분이 다음으로 나아가기 전에 최소한의 기본기를 훈련
하는 시간으로 생각하자
지금까지 학습할 때 한가지 아쉬움이 있었는데, 바로 사용자의 입력이 없었다는 점이다.
이번 시간에는 사용자의 입력을 받는 방법을 배워서, 좀 더 그럴듯한 프로그램을 만들어보자.
백문이 불여일타!
변수, 연산자, 조건문, 반복문을 머리로 이해하는 것은 전혀 어렵지 않다. 하지만 머리로 생각만 하는 것은 수영을
이렇게 해야하겠지? 라고 머리로 생각하는 것과 같다. 중요한 것은 코딩을 몸이 익히는 것이다. 그러기 위해서는
직접 코딩하는 것이 무엇보다 중요하다! 학생때 처럼 단순히 외우는 방식으로는 좋은 프로그래머가 될 수 없다. 예
제 코드는 모두 따라해보고, 문제도 직접 다 풀어보자, 문제가 안풀리면 답을 보고 코드를 따라친 다음에 기존 코
드를 모두 지우고 처음부터 본인이 스스로 다시 풀어보아도 좋다. 백문이 불여일타!
System.out 을 통해서 출력을 했듯이, System.in 을 통해서 사용자의 입력을 받을 수 있다. 그런데 자바가 제공하는 System.in 을 통해서 사용자 입력을 받으려면 여러 과정을 거쳐야해서 복잡하고 어렵다.
자바는 이런 문제를 해결하기 위해 Scanner 라는 클래스를 제공한다. 이 클래스를 사용하면 사용자 입력을 매우 편리하게 받을 수 있다.
Scanner 예제1
Scanner1
package scanner;
import java.util.Scanner;
public class Scanner1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요:");
String str = scanner.nextLine(); // 입력을 String으로 가져옵니다.
System.out.println("입력한 문자열: " + str);
System.out.print("정수를 입력하세요:");
int intValue = scanner.nextInt(); // 입력을 int로 가져옵니다.
System.out.println("입력한 정수: " + intValue);
System.out.print("실수를 입력하세요:");
double doubleValue = scanner.nextDouble(); // 입력을 double로 가져옵니다.
System.out.println("입력한 실수: " + doubleValue);
}
}
Scanner scanner = new Scanner(System.in);Scanner 의 기능을 사용하기 위해new 를 사용해서 Scanner 를 만든다 정도로 이해하면 된다. Scanner 는 System.in 을 사용해서 사용Scanner scanner 코드는 scanner 변수를 선언하는 것이다. 이제부터 scanner 변수를 통해서 scanner 를 사용할 수 있다.scanner.nextLine()\n )을 입력할 때 까지 문자를 가져온다.scanner.nextInt()int 형으로 가져온다. 정수 입력에 사용한다.scanner.nextDouble()double 형으로 가져온다. 실수 입력에 사용한다.출력 예시
문자열을 입력하세요:hello
입력한 문자열: hello
정수를 입력하세요:10
입력한 정수: 10
실수를 입력하세요:1.5
입력한 실수: 1.5
주의! - 다른 타입 입력시 오류
타입이 다르면 오류가 발생한다. 예제와 같이 숫자에 문자를 입력하면 오류가 발생한다.
문자열을 입력하세요:hello
입력한 문자열: hello
정수를 입력하세요:백만원
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at scanner.Scanner1.main(Scanner1.java:15)
print() vs println()
다음 코드를 보면 println() 이 아니라 print() 를 사용한다.
System.out.print("문자열을 입력하세요:")
그 이유는 다음과 같다.
print() 출력하고 다음 라인으로 넘기지 않는다.
System.out.print("hello");
System.out.print("world");
//결과: helloworld
println() 출력하고 다음 라인으로 넘긴다.
System.out.println("hello");
System.out.println("world");
//결과:
hello
world
우리가 엔터 키를 치면 ( \n )이라는 문자를 남기는 것이다.
이 문자는 영어로 new line character, 한글로 줄바꿈 문자 또는 개행 문자라고 하는데, 이름 그대로 새로운 라인으로 넘기라는 뜻이다. 콘솔에서는 이 문자를 보고 다음 라인으로 넘긴다.
println() 은 print() 의 마지막에 \n 을 추가한다. 따라서 다음 코드는 println() 과 같다.
System.out.print("hello\n");
System.out.print("world\n");
//결과:
hello
world
이번에는 Scanner 를 활용하는 간단한 예제를 만들어보자.
두 수를 입력받고 그 합을 출력하는 예제이다.
Scanner2
package scanner;
import java.util.Scanner;
public class Scanner2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = scanner.nextInt(); int sum = num1 + num2;
System.out.println("두 숫자의 합: " + sum);
}
}
실행 결과
첫 번째 숫자를 입력하세요:10
두 번째 숫자를 입력하세요:20
두 숫자의 합: 30
이해하는데 어려움은 없을 것이다.
사용자로부터 두 개의 정수를 입력 받고, 더 큰 수를 출력하는 프로그램을 작성해보자. 두 숫자가 같은 경우 두 숫자는
같다고 출력하면 된다.
조건문을 사용해서 처리할 수 있다.
Scanner3
package scanner;
import java.util.Scanner;
public class Scanner3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = scanner.nextInt();
if (num1 > num2) {
System.out.println("더 큰 숫자: " + num1);
} else if (num2 > num1) {
System.out.println("더 큰 숫자: " + num2);
} else {
System.out.println("두 숫자는 같습니다.");
} }
}
실행 결과
첫 번째 숫자를 입력하세요:10
두 번째 숫자를 입력하세요:20
더 큰 숫자: 20
첫 번째 숫자를 입력하세요:5
두 번째 숫자를 입력하세요:5
두 숫자는 같습니다.
우리가 지금까지 개발한 프로그램들은 단 한 번의 결과 출력 후 종료되는 일회성 프로그램이었다. 실제 프로그램들은 이
렇게 한 번의 결과만 출력하고 종료되지 않는다. 한 번 실행하면 사용자가 프로그램을 종료할 때 까지 반복해서 실행된
다. 이제부터는 사용자의 입력을 지속해서 받아들이고, 반복해서 동작하는 프로그램을 개발해보자.
Scanner 와 반복문을 함께 사용하면 된다
Scanner 반복 예제1
exit 라는 문자가 입력되면 프로그램을 종료한다.ScannerWhile1
package scanner;
import java.util.Scanner;
public class ScannerWhile1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); while (true) {
System.out.print("문자열을 입력하세요(exit: 종료):");
String str = scanner.nextLine();
if (str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.println("입력한 문자열: " + str);
}
}
}
실행 결과
문자열을 입력하세요(exit: 종료):hello
입력한 문자열: hello
문자열을 입력하세요(exit: 종료):안녕?
입력한 문자열: 안녕?
문자열을 입력하세요(exit: 종료):exit
프로그램을 종료합니다.
while (true) : 중간에 break 문을 만나기 전까지 무한 반복한다.
if (str.equals("exit")) {
System.out.println("프로그램을 종료합니다.");
break;
}
입력 받은 문자가 "exit" 이면 "프로그램을 종료합니다."를 출력하고 break 문을 통해서 while 문을 빠져나간다.
Scanner 반복 예제2
ScannerWhile2
package scanner;
import java.util.Scanner;public class ScannerWhile2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니
다.");
while (true) {
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = scanner.nextInt();
if (num1 == 0 && num2 == 0) {
System.out.println("프로그램 종료");
break;
}
int sum = num1 + num2;
System.out.println("두 숫자의 합: " + sum);
}
}
}
실행 결과
첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니다.
첫 번째 숫자를 입력하세요:10
두 번째 숫자를 입력하세요:20
두 숫자의 합: 30
첫 번째 숫자를 입력하세요:0
두 번째 숫자를 입력하세요:0
프로그램 종료
종료 부분
if (num1 == 0 && num2 == 0) {
System.out.println("프로그램 종료");
break;
}
num1 == 0 && num2 == 0
num1 , num2 둘다 함께 0일 때 "프로그램 종료" 를 출력하고 break 를 통해 while 문을 빠져나간true && true -> true 이다. 따라서 두 조건이 모두 참이어야 if 문의 코드 블럭이 실행된다.Scanner 반복 예제3
사용자 입력을 받아 그 합계를 계산하는 프로그램을 작성해야 한다.
사용자는 한 번에 한 개의 정수를 입력할 수 있으며, 사용자가 0을 입력하면 프로그램은 종료된다. 이 때, 프로그램이 종료될 때까지 사용자가 입력한 모든 정수의 합을 출력해야 한다.
ScannerWhile3
package scanner;
import java.util.Scanner;
public class ScannerWhile3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum = 0;
while (true) {
System.out.print("정수를 입력하세요 (0을 입력하면 종료): ");
int number = input.nextInt();
if (number == 0) {
break;
}
sum += number;
}
System.out.println("입력한 모든 정수의 합: " + sum);
}
}
실행 결과
정수를 입력하세요 (0을 입력하면 종료): 1
정수를 입력하세요 (0을 입력하면 종료): 2정수를 입력하세요 (0을 입력하면 종료): 3
정수를 입력하세요 (0을 입력하면 종료): 0
입력한 모든 정수의 합: 6
int sum : 이곳에 사용자가 입력한 값을 누적한다.sum += number : 사용자가 입력한 number 값을 sum 에 누적해서 더한다.+= 을 사용했으므로 다음 코드와 같다: sum = sum + number


문제 - 사이 숫자
package scanner.ex;
import java.util.Scanner;
public class ScannerEx5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = scanner.nextInt();
// num1이 num2보다 큰 경우, 두 숫자를 교환합니다.
if (num1 > num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
System.out.print("두 숫자 사이의 모든 정수:");
for (int i = num1; i <= num2; i++) { System.out.print(i);
if (i != num2) {
System.out.print(",");
}
}
}
}
문제 - 입력한 숫자의 합계와 평균
package scanner.ex;
import java.util.Scanner;
public class ScannerWhileEx3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int count = 0;
int input = 0;
System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요:");
//반복문 예제1
while (true) {
input = scanner.nextInt();
if (input == -1) {
break;
}
sum += input;
count++;
}
//반복문 예제2
/*
while ((input = scanner.nextInt()) != -1) {
sum += input;
count++;
}
*/
double average = (double) sum / count;
System.out.println("입력한 숫자들의 합계: " + sum);
System.out.println("입력한 숫자들의 평균: " + average);
}
}
문제 - 상품 구매