hyperskill - Reading user's input with Scanner 영어 원문
standard input (표준 입력) 은 프로그램으로 향하는 데이터 스트림이며,
운영체제에 의해 지원받습니다.
기본적으로, 표준 입력은 키보드 입력 데이터를 필요로 하지만,
파일로부터 redirect 하여 표준 입력으로 삼을 수도 있습니다.
모든 프로그램이 표준 입력을 요구하는 것은 아닙니다만,
당신은 프로그래밍 스킬을 마스터하는 것을 돕기 위해 이러한 표준 입력을 자주 사용하게 될 겁니다!
프로그래밍 문제들을 풀기 위한 일반적인 접근은 :
- 표준 입력 으로부터 데이터를 읽는다 -
(System.in)
- 결과를 얻기 위해 데이터를 처리합니다.
- 표준 출력 (standard output) 으로 결과를 내보냅니다. -
(System.out)
이러한 타입의 코드 문제는 서로 다른 입력 데이터 형태로 매일 테스트 할 수 있습니다.
따라서, 우리는 이를 자주 사용 할 겁니다.
Reading data with a scanner - scanner 로 데이터 읽기
표준 입력으로부터 데이터를 얻는 가장 간단한 메서드는,
표준 클래스 Scanner
를 사용하는 겁니다.
이 메서드는 프로그램이 표준 입력으로부터,
다양한 타입의 값, 문자열과 숫자와 같은 값을 읽을 수 있게 해 줍니다.
이번 주제에서는, 입력으로부터 데이터를 읽는 것에 대해 배울 겁니다.
이 클래스 Scanner
를 사용하기 위해서, 당신은 소스가 적혀 있는 당신의 파일의 맨 위 상단에
밑의 구문을 추가해야 합니다.
import java.util.Scanner;
// import java.util.*; 최적화가 덜 될 수는 있겠지만, 이러한 형태를 사용하기도 합니다.
import
후에, 이러한 구조에 클래스를 추가하세요 :
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
}
}
main
메서드에서, 우리는 Scanner
클래스의 오브젝트를 만들었습니다.
이 Scanner
클래스는 이 클래스의 메서드를 사용 할 수 있게 해 줍니다.
System.in
신호는 프로그램이 당신이 표준 입력이 입력하는 텍스트를 읽을 거라는 겁니다.
System
으로부터 표준 입력 에 대한 리소스 자원을 할당한다는 의미입니다.Scanner
의 대체품으로BufferedReader
클래스가 존재하지만,throws
를 통해IOException
에러 관리를 해 주어야 하기 때문에 기호에 맞게 선택하면 됩니다.
Scanner
클래스는 문자열을 읽는 데 두 가지 방법을 제안합니다.
만약 당신의 입력이 숫자이거나, 하나의 단어라면,
당신은 next()
메서드를 사용 할 수 있습니다.
예를 들어, 밑의 코드 조각은 유저의 이름을 읽고, hello
메세지를 출력합니다. :
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
System.out.println("Hello, " + name + "!");
}
}
예를 들어, 만약 유저가 James 와 같은 이름을 입력하였다면,
프로그램의 출력은 이와 같습니다 :
Hello, James!
만약 당신이 유저의 입력에 123 과 같은 숫자를 입력했다면,
프로그램은 숫자를 출력 할 겁니다.
next()
메서드는 입력 된 문자열이 숫자를 표방하더라도,
문자열로 취급할 것이란 것을 기억하세요.
Hello, 123!
그렇다면, 만약 유저의 입력이 Erich Maria 와 같은 전체 이름이라면 어떨까요?
이 프로그램은 오로지 첫 번째 단어만 출력 할 겁니다:
Hello, Erich!
이러한 경우, 당신은 다시 next()
메서드를 삽입해야 합니다 :
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String firstName = scanner.next(); // "Erich"
String lastName = scanner.next(); // "Maria"
System.out.println("Hello, " + firstName + " " + lastName + "!");
}
}
하지만, 사용하면 더 효율적인 또다른 메서드가 있는데,
이는 nextLine()
메서드입니다.
이 메서드는 하나의 줄을 전부 읽고, 출력합니다 :
Hello, Erich Maria!
당신은 next()
메서드가 오로지 하나의 단어만 읽고, 모든 공백을 제외한다는 것을 눈치 챘을 겁니다.
한편으로는, nextLine()
메서드는 들어오는 모든 공백 문자들도 포함합니다.
Java의 whitespace 에서는 그냥 공백 문자들 뿐만 아니라,
공백으로 출력되는 모든 문자들도 포함한다는 것도 참고하세요 : 개행 문자, 탭, 다른 공백 문자들
이 아티클에서는, 우리는 단순공백(space) 와 개행문자(newline) 에 대해서 다룰 겁니다 :
본질적으로, 우리는 엔터를 누르고 새로운 줄을 시작 할 때 알맞는 문자를 생성합니다.
whitespace 라는 용어는 둘 중 하나에 속합니다.
우리는 더 알맞는 용어를 위해 word 즉, 단어는 token (토큰) 이라 부르며,
이 토큰이란 것은 공백에 의해 둘러싸여진 텍스트의 조각처럼 묘사 될 수 있습니다.
따라서 우리는 next()
메서드는 그 다음 토큰을 반환한다고 말할 수 있으며,
반면에 nextLine()
메서드는 현재 줄의 끝까지 모든 데이터를 읽는다고 말할 수 있습니다.
Reading a multiline input - 다중 입력 읽기
여러개의 입력을 읽는 것은 조금 복잡할 수 있습니다
당신은 커서의 위치와 데이터를 읽는 메서드의 행동을 고려 해 봐야 합니다.
밑의 예제와 탐색하겠습니다 :
|This is a simple
multiline input,
that is being read
|
문자가 가르키는 것은,
입력 데이터를 읽기 전의 커서의 위치 입니다.
만약 우리가 next()
메서드를 불렀다면, 프로그램은 공백 이전까지 입력 데이터를 읽습니다.
This| is a simple
multiline input,
that is being read
nextLine()
메서드를 호출하고 나면, 프로그램은 공백 에서부터 시작하여 남은 줄을 읽습니다.
만약 이러한 줄이 당신의 입력에 있는 경우,
nextLine()
메서드는 커서를 새로운 줄의 시작 부분에 배치시킵니다 :
This is simple
|multiline input,
that is being read
다음으로, next()
메서드를 두 번 호출 해 보겠습니다.
첫 번째 입력은 단어의 오른쪽, 공백 이전의 커서로 가르켜지게 됩니다. :
This is a simple
multiline| input,
that is being read
여기 nextLine()
메서드가 다루기 까다로운 것이 있는데,
이는 next()
와 nextLine()
메서드 간의 주요한 차이점에서도 보여집니다.
당신이 이미 알다시피,
프로그램은 커서의 위치부터 새로운 라인이 될 때 까지 읽습니다.
이번 예제에서는, 커서는 새로운 줄 이전에 위치 해 있습니다.
이것이 의미하는 바는,
nextLine()
메서드가 빈 줄 ""
을 반환하고, 새로운 줄의 시작에 커서를 위치한다는 것을 의미합니다.
This is a simple
multiline input,
|that is being read
위에 있는 모든 것을 요약하기 위해서,
전체적인 코드를 살펴보고, 우리가 읽은 변수들을 고려해야 합니다 :
import java.util.Scanner;
// import java.util.*; 로 대체 가능
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String word1 = scanner.next(); // "This"
String line1 = scanner.nextLine(); // " is a simple"
String word2 = scanner.next(); // "multiline"
String word3 = scanner.next(); // "input,"
String line2 = scanner.nextLine(); // ""
}
}
이 예제는 보기엔 조금 인공적으로 보입니다만,
이는 당신이 이러한 두 메서드가 간의 차이점을 이해하는 것을 보조 해 줍니다.
이 두 메서드는 종종 사용되며, 변수들은 좀 더 표현적인 이름을 가져야 합니다.
Conclusion - 결론
당신은 Scanner
클래스에 특화 된 표준 입력으로부터 데이터를 읽을 수 있습니다.
next()
, nextLine()
메서드들은 당신이 문자열을 읽는데 도움을 줍니다.
두 개 모두 입력 데이터를 수집하는 데 사용되지만, 서로 다르게 행동합니다.
next()
메서드는 다음 공백까지 입력값을 읽으며,
반면에 nextLine()
메서드는 라인의 끝까지 입력값을 읽습니다.
우리는 프로그래밍 문제들을 풀 때 Scanner
클래스를 사용하는 것을 제시했습니다.
이는 표준 입력 으로부터 값을 얻기 위한 가장 간단한 방법 중 하나입니다.
words to remember
invoke : 호출하다
eaily : 매일
up to : 까지
tricky : 교활한, 다루기 까다로운 --- tricky thing : 까다로운 것
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Java Backend Developer (Spring Boot)' 카테고리의 다른 글
Naming variables - 변수 이름 (0) | 2024.06.20 |
---|---|
Coding style conventions - 코드 스타일 규칙 및 협약 (0) | 2024.06.19 |
Comments - 주석 (0) | 2024.05.06 |
Types and variables - 타입과 변수 (0) | 2024.05.06 |
Printing data - 데이터 출력하기 (0) | 2024.05.04 |