H'academy
  • H'academy
  • Web
    • Back-end
      • Spring Framework
        • Spring 개발환경 구축
          • Project 생성
          • Maven 설정
          • Maven 저장소 위치 설정
          • Apache Tomcat 연동
          • Lombok 설정
        • Spring MVC Project
          • pom.xml
          • web.xml
          • root-context.xml
          • servlet-context.xml
          • DispatcherServlet
        • Controller
          • File Upload / Download
          • RestController(작성중)
        • Spring Test
          • Assert 단정문
          • Spring 환경 연동 테스트
          • MockMvc Test
        • Spring AOP
          • AOP 용어
          • Pointcut Expression
          • Filter
          • Interceptor
          • Filter vs Interceptor
          • Controller Advice(작성중)
        • Spring JDBC
          • DBCP
          • myBatis
            • ResultMap 활용
        • ETC
          • Logging
            • Tomcat Logging 설정
          • Property 관리
          • E-mail
            • Gmail 변경사항
          • Scheduler
          • Websocket
      • Spring Boot
        • STS 다운로드
        • 프로젝트 생성
        • 프로젝트 구조
        • Spring Devtools
        • Spring Controller
          • JSP 연동
            • * JSP 생성불가 문제
            • Spring Boot 3.x
          • Model
          • 요청 파라미터 처리
          • 경로 변수 처리
          • 요청 메소드
          • Redirect
          • Spring Actuator
        • Spring Boot JDBC
          • Database 정보
          • DAO Pattern
          • ORM Framework
            • myBatis
              • Mapper 생성
            • Spring Data JPA
        • Spring AOP
          • AspectJ
          • Filter
          • Interceptor
          • ControllerAdvice
        • REST API
        • Spring WebSocket
        • Send Mail
        • Logging
        • Spring Boot Test
        • Lombok
      • Java EE
        • 개발환경 구성
          • Server와 Client
          • Web Server와 WAS
        • Dynamic Web Project
      • Apache Tomcat
        • Apache Tomcat 구조
        • Tomcat User 생성
        • Tomcat Manager 설정
      • Maven
      • Jenkins
        • Installation
          • Github Webhook 설정
          • Maven 연동
        • Project setting
          • 소스 코드 관리 설정
          • 빌드 유발 설정
          • 빌드 작업 설정
      • OpenAPI(swagger)
        • swagger 2.x (legacy)
        • swagger 3.x (boot)
        • Swagger UI 꾸미기
        • SpringDoc
    • Front-end
      • HTML
        • Heading
        • <A>
        • <IMG>
        • <DIV>
        • <TABLE>
        • <FORM>
          • <INPUT>
          • <SELECT>
          • <TEXTAREA>
          • <FIELDSET>
        • List
      • CSS
        • CSS 적용 방식
          • 크기(size)
            • 픽셀(px)
          • 색상(color)
        • CSS 선택자
          • 스타일 우선순위
        • CSS 주요 속성
          • 크기 속성
            • border
            • margin
            • padding
            • box-sizing
          • 배경 속성
          • 글자 속성
            • font
            • text
          • 배치 속성
            • position
            • display
            • overflow
            • float
            • flexbox
        • CSS Reset
      • JS
        • syntax
          • let, const
          • 구조 분해 할당
          • spread operator
          • Object copy
          • this
          • module
        • jQuery
          • structure
          • function
          • ajax
            • ajax file upload
        • VueJS
          • CDN(Vue3)
            • 기본 구조
            • Vue Devtools
            • jQuery vs VueJS
            • Vue instance
              • data
                • IME issue
              • v-model
              • template
              • computed
              • watch
                • deep watch
                • vs Computed
              • methods
            • Vue directive
              • v-text
              • v-html
              • v-bind
                • v-bind style
                • v-bind class
              • v-on
                • once
                • prevent
              • v-show
              • v-if
              • v-for
          • Vue-cli 3
            • 프로젝트 구조
            • src
              • main.js
              • App.vue
              • HelloWorld.vue
            • Vue Router 4
              • History mode
              • 404 not found
              • Guard
                • beforeEach
            • Vuex
              • 이동 횟수 측정
            • axios
              • interceptor
          • Vue-electron
        • ReactJS
          • CDN(React18)
            • 템플릿 설명
            • JSX
            • render
            • Handling Events
              • onClick
              • onInput
            • Component
              • 클래스 컴포넌트
                • state
                • props
                • event
                  • Mouse
                  • Input
                • lifecycle
              • 함수형 컴포넌트
                • useState
                • useEffect
                • useReducer
                • useMemo
                • props
                • 조건부 렌더링
          • CRA
            • 자원 경로 설정
            • src 절대 경로 설정
            • react-router
            • Context API
            • Electron 설정
        • Webpack
          • NodeJS
          • Git
    • Ubuntu server
      • Jenkins
    • 테스트 도구
      • JMeter
        • Test Plan
        • Test Plan(with login)
        • Plugin 설치
    • WebRTC
  • Base Language
    • Java
      • Java 실행 과정
        • 개발 환경 구축
        • 샘플 코드 작성
        • 컴파일/실행
        • 환경 변수 설정
      • Java 초급
        • Hello world
        • 자료와 정보
        • 변수
          • 정수
            • 정수의 저장 원리
            • 정수형 변수 생성
          • 실수
            • 실수의 저장 원리
            • 실수형 변수 생성
          • 논리
            • 논리형 변수 생성
          • 문자
          • 문자열
            • 문자열 변수 생성
          • 사용자 정의 자료형
        • 연산자
          • 대입 연산
          • 부호 연산
          • 산술 연산
          • 복합 대입 연산
          • 증감 연산
          • 쉬프트 연산
          • 비트 연산
          • 비교 연산
          • 논리 연산
          • 삼항 연산
          • 변환 연산
        • 표준 입출력
          • 표준 출력
          • 표준 오류 출력
          • 표준 입력
            • Scanner 입력
        • 제어문
          • if 구문
            • 단일 조건
            • 두 가지의 조건
            • 여러 가지의 조건
          • switch~case 구문
          • while 구문
          • do~while 구문
          • for 구문
        • 랜덤(Random)
        • 배열
          • 1차원 배열
          • 2차원 배열
          • 다차원 배열
          • Sort
            • 선택 정렬
            • 버블 정렬
            • 삽입 정렬
      • Java 중급
        • 객체 지향 프로그래밍
        • 클래스
        • 인스턴스
        • 필드
        • 메소드
          • 설정(setter) 메소드
          • 반환(getter) 메소드
        • 생성자
        • 접근 제한
          • private
          • package
          • protected
          • public
        • 정적(static)
        • 불변(final)
        • 상수(constant)
        • 상속
          • this와 super의 이해
          • 멤버 변수 설정
          • 멤버 메소드 설정
          • 생성자 설정
        • 추상화
          • 추상 클래스
          • 인터페이스
        • 다형성
        • 중첩 클래스
          • 일반 중첩 클래스
          • static 중첩 클래스
          • 지역 중첩 클래스
          • 익명 중첩 클래스
      • Java API(작성중)
        • java.lang
        • java.util
        • java.text
        • java.time
        • java.io
        • java.net
        • java.sql
        • java.awt
        • javax.swing
      • Java 고급
        • 제네릭(Generic)
        • 열거형(Enum)
        • Annotation Type
          • Retention
          • Target
          • Nested Annotation
        • Java Reflection
          • Intro
          • Class
          • Field
          • Constructor
          • Method
          • Package
      • JDBC
        • 드라이버 로드
        • 연결 생성
          • JDBC Driver 유형
        • JdbcTemplate
      • Java 버전별 변경사항
        • Java 1.8
          • Lambda Expression
          • Stream API
          • java.time 패키지
        • Java 9
        • Java 12
          • switch~case
        • Java 13
          • Text Block
    • Arduino
      • 학습 준비
        • Reference
        • 아두이노 온라인 시뮬레이터
        • 전기의 이해
        • 그라운드(GND)의 이해
      • 개발 환경 구축
        • CH340 보드 설치
        • Editor 글꼴 설정
      • 아두이노 제어
        • 코드의 구성
        • 시리얼 출력
        • 디지털 출력
          • LED 출력
        • PWM 출력
        • 시리얼 입력
        • 디지털 입력
          • PIR 센서
        • 아날로그 입력
          • 온도 센서(LM35DZ)
          • 조도 센서
          • 가스 센서
        • 피에조 부저
        • 서보 모터 제어
          • 시리얼 서보 모터 제어
          • 스위치 서보 모터 제어
        • 온습도 센서(DHT-11)
        • LCD
      • 아두이노 통신
        • 블루투스(Bluetooth)
          • HC-06
            • 온도 센서 활용
          • HM-10
        • 와이파이(Wi-Fi)
          • ESP-01
            • WiFiEsp 라이브러리 추가
            • WiFiEsp 네트워크 스캔
        • 이더넷(Ethernet)
        • ArduinoJson 라이브리 사용
    • Regular Expression
  • Database
    • Oracle
      • 설치
        • SQL Plus
        • SQL Developer
        • DBeaver
        • Docker(Mac OS)
      • SQL
        • 관리자 명령
          • 사용자 관리
          • 권한 관리
          • Encoding 설정
          • 서비스 포트 설정
        • 사용자 명령
          • 테이블 관리
            • 테이블 항목 제약 조건
            • 외래키 제약조건
            • 데이터 유형
          • 시퀀스 관리
          • 데이터 관리
            • 데이터 추가
            • 데이터 조회
              • 오라클 내장 함수
              • 그룹 조회
              • Top N Query
            • 데이터 수정
            • 데이터 삭제
          • 뷰 관리
          • 인덱스 관리
          • 집합 연산
          • 테이블 조인
            • 등가 조인
            • 외부 조인
        • HR 계정
        • 기타 명령
          • 컬럼 간격 조정
      • 내보내기 및 불러오기
        • EXPDP, IMPDP
        • Docker로 실행중인 경우
      • 기타
        • 자동 세션 제거
        • Tablespace 관리
        • Unlock user
  • 면접대비
    • Q&A
      • Java
      • Database
      • Web
      • IT 일반상식
  • ETC
    • Eclipse IDE
      • 설치
      • 화면 설명
      • 환경 설정
      • 프로젝트 생성
      • 소스파일 작성 및 실행
    • Github
      • Github 계정 관리
      • Github 저장소 관리
        • Profile
        • Collaborators
        • Code
        • Issues
        • Pull requests
        • Action
          • Vue 3 Deploy Action
      • Personal Access Token
      • Git ignore 설정
        • Spring 개발용 샘플
      • Github Eclipse 연동
        • Branches
        • Project
        • Team project
          • Dynamic web project
          • Spring Boot Project
          • Branch 생성
          • Pull Request
          • Branch 보호
          • Branch 다시 생성
    • Figma
      • Team
      • Design
      • Component
    • 과정평가형
      • 실기 모의고사 1회
      • 실기 모의고사 2회
      • 실기 모의고사 3회
      • 실기 모의고사 4회
    • VScode
      • Live Server 실행 오류
      • Github 계정 변경
    • Naver ToastUI Editor
      • Editor 만들기
        • Editor options
          • File upload
      • Viewer 만들기
    • 문자 인코딩 방식
    • OBS
      • 녹화 잡음 제거 설정
    • Semantic Version
Powered by GitBook
On this page
  • Scanner 사용 입력 처리
  • Scanner
  • Scanner 생성
  • Scanner 종료
  • Scanner 사용
  1. Base Language
  2. Java
  3. Java 초급
  4. 표준 입출력
  5. 표준 입력

Scanner 입력

Scanner 사용 입력 처리

이 문서에서는 Scanner를 이용하여 System.in에 대한 입력을 처리하는 방법에 대해서 다룬다.

Scanner

Scanner는 java.util 패키지에 있어서 기본적으로 지원되는 도구가 아니다. 또한 스캐너의 주 목적은 System.in에 대한 입력을 처리하는 것이 아니라 문자열의 패턴 분석도구이다. 이를 표준 입력에 적용시켜도 잘 작동하기 때문에 자바에서 표준 입력을 처리할 때 Scanner를 많이 사용한다. Scanner는 System.in에서 입력되는 글자들을 모아 원하는 패턴에 맞게 입력받는 역할을 수행한다.

Scanner 생성

Scanner는 기본적으로 지원되는 도구가 아니기 때문에 사용하기 위해서는 생성이라는 과정을 거친다. 생성 코드는 다음과 같다.

Scanner sc = new Scanner(System.in);

아직 객체 생성을 배우지 않았기 때문에 간략하게 살펴보면 다음과 같다.

  • Scanner : 도구의 보관 형태(자료형)을 말한다.

  • sc : 제어를 위해 만든 참조 변수의 이름이다. 참조 변수는 리모컨의 형태라고 이해하면 된다.

  • new : 신규 도구 생성 키워드이다. 바로 뒤에 있는 대상을 생성한다.

  • Scanner(System.in) : Scanner를 만들면서 System.in의 정보를 알려주어 결합하겠다는 뜻이다.

Scanner 종료

Scanner처럼 입력을 위한 도구를 만든 경우 메모리 관리를 위하여 반드시 사용 후 종료를 해야 한다. 이는 마치 컴퓨터를 사용하고 나서 전원을 끄는 것과 마찬가지로, 프로그램 내에서 메모리를 효율적으로 관리할 수 있는 방법 중 하나이다.

sc.close();

여기서 sc는 만들 때 지어둔 변수임에 유의한다. 변수명이 다르면 sc 자리에 해당 변수명이 위치하게 된다.

Scanner 사용

Scanner를 이용하여 사용자가 입력하는 다양한 형태의 값을 입력받을 수 있다.

  • 단어 입력 : .next()

  • 한줄 입력 : .nextLine()

  • 정수 입력 : .nextInt(), .nextLong(), .nextByte(), .nextShort()

  • 실수 입력 : .nextFloat(), .nextDouble()

  • 논리 입력 : .nextBoolean()

Scanner 입력값 구분 기준

사용자가 다음과 같은 값을 입력했다고 가정해본다.

학교종이 땡땡땡 어서모이자
선생님이 우리를 기다리신다

띄어쓰기는 아스키코드 32번이며, 개행은 아스키코드10번이므로 실제 컴퓨터에는 다음과 같은 값이 전달된다. (개행은 운영체제에 따라 전달되는 값이 다르며, \13\10형태로 들어올 수 있다)

학교종이\32땡땡땡\32어서모이자\10선생님이\32우리를\32기다리신다\10

위의 입력형태를 놓고 생각한다면, 우리가 알고 있는 띄어쓰기나 엔터 등도 하나의 값을 가지기 때문에 단어와 한줄은 다음과 같이 생각해볼 수 있다.

  • 단어 : NULL(0), NewLine(10), Space(32) 등 공백이 발생하기 전까지의 값

  • 한줄 : NULL(0), NewLine(10)이 발생하기 전까지의 값

NULL은 없음을 나타내는 값이기 때문에 만약 NULL이 발생해도 공백으로 간주할 수 있다.

단어 입력

String str = sc.next();

편의상 단어라고 부르기는 하지만 정확히 이야기하면 공백이 발생하기 전까지 입력한 글자를 말한다. 위에서 살펴본 예제를 통해서 단어 입력이 어떤식으로 이루어지는지 살펴본다

학교종이\32땡땡땡\32어서모이자\10선생님이\32우리를\32기다리신다\10

단어 입력을 한 번 수행하면 다음과 같은 내용이 남게 된다.

\32땡땡땡\32어서모이자\10선생님이\32우리를\32기다리신다\10

다음 단어 입력을 수행하게 되면 시작하자마자 Space(32)가 나오게 되는데 이런 경우 이전 입력에서 남은 값으로 간주하여 버리고 다음 값을 읽게 된다.

\32어서모이자\10선생님이\32우리를\32기다리신다\10

이런 식으로 계속해서 입력 받을 수 있다.

\10선생님이\32우리를\32기다리신다\10
\32우리를\32기다리신다\10
\32기다리신다\10
\10

더이상 입력받을 내용이 없을 경우에는 오류가 발생한다.

import java.util.*;//Scanner를 위한 import
public class ScannerWordInput {
    public static void main(String[] args){
        //도구 생성
        Scanner sc = new Scanner(System.in);
        
        //단어 입력
        String a = sc.next();
        String b = sc.next();
        String c = sc.next();
        String d = sc.next();
        String e = sc.next();
        String f = sc.next();
        
        //출력
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        
        //도구 정리
        sc.close();
    }
}

실행한 다음 다음과 같이 입력하여 출력 결과를 살펴보면 이해할 수 있다.

동해물과 백두산이 마르고닳도록
하느님이 보우하사 우리나라만세

한 줄 입력

String str = sc.nextLine();

줄 전체를 입력받고 싶은 경우에는 Space(32)는 고려 대상이 아니게 된다. 따라서 NULL(0) 또는 NewLine(10)을 발견하기 전까지 입력받은 내용을 문자열 변수에 저장하게 된다.

학교종이\32땡땡땡\32어서모이자\10선생님이\32우리를\32기다리신다\10

위의 값에서 한줄 입력을 수행하고 난 후 남은 데이터는 다음과 같다.

선생님이\32우리를\32기다리신다\10

단어 입력 부분과 유심히 비교해보면 차이점이 있는데, NewLine(10)에 해당하는 값인 \10을 버린다는 것이다. 이렇게 단어 입력과 한줄 입력의 차이점이 존재하기 때문에 혼용할 경우 주의사항이 발생하게 된다.

한 번 더 입력을 받으면 모든 값이 입력 완료된다.

정수 입력

int num = sc.nextInt();

정수 입력은 단어 입력 후 입력값을 숫자로 변환한 것과 같다. 중요한 것은 한 줄 입력은 아니라는 것이며, 왜 그런지에 대해서는 다음 값을 보면 이해할 수 있다.

111 222 333 
444 555

누군가가 위의 글자 중 숫자가 몇 개인가?라고 물어봤을 때 우리는 망설이지 않고 5개라고 대답할 것이다. 숫자의 경우도 공백을 기준으로 구분된다는 것을 의미하며, 이는 단어 입력의 방식과 동일하다.

변환 명령만 알면 다음과 같이 표현할 수도 있다.

String str = sc.next();
int num = Integer.parseInt(str);

하지만 nextInt 명령을 이용하면 한 줄로 처리가 되므로 쉽게 이용할 수 있다.

int 외의 정수들은 다음과 같이 입력받으며, 이용방법은 동일하다.

byte a = sc.nextByte();
short b = sc.nextShort();
long c = sc.nextLong();

실수 입력

실수도 정수와 마찬가지로 단어 입력과 동일하게 진행된다. 실수는 두 종류가 있으며, 각각에 대한 명령은 다음과 같다.

float a = sc.nextFloat();
double b = sc.nextDouble();
Previous표준 입력Next제어문

Last updated 3 years ago