Java 파트2-3. 변수와 시스템 입출력

1. 시작하기 전


핵심 포인트

그림1

  • 프로그래밍 언어에는 시스템표준 출력 장치와 표준 입력 장치 이해
    • 표준 출력 장치 -> 모니터
    • 표준 입력 장치 -> 키보드
  • System.out
    • 시스템의 표준 출력 장치로 출력
  • system.in
    • 시스템의 표준 입력 장치에서 읽음


2. 모니터로 변수값 출력하기


println() 메소드

괄호 안에 리터럴 넣으면 그대로 출력 / 변수 넣으면 저장된 값 출력

그림2

다양한 출력 메소드

그림3

printf()메소드

개발자가 원하는 형식화된 문자열 출력(C언어와 똑같음)

System.out.printf("이름 : %s | 나이 %d", "홍길동",25);

다양한 형식 문자열

그림4


3. 키코드

  • 키보드에서 키를 입력할 때 프로그램에서 숫자로 된 키코드를 읽음
  • System.in의 read() 사용
    • 한 문자씩 받는다.
  • 얻은 키코드는 대입 연산자 사용하여 int 변수에 저장
  • System.read.in() 사용시 메소드 선언부 옆에 throws Exception 작성 필수
    • 예외가 발생했을 경우, 예외를 모니터에 출력하고 끝내라 라는 뜻으로 생각

그림5

package sec01.exam02;

public class booleanexample {

	public static void main(String[] args) throws Exception {
		int keyCode = System.in.read();
		System.out.println(keyCode);
		int a;
		a = System.in.read();
		System.out.println(a);
		while(true) {
			a=System.in.read();
			System.out.println(a);
			if(a=='q')
				break;
		}
	}

}

A 엔터 q엔터 를 입력하면 65 13 10 113이 출력되고 종료된다.
위 그림에서 보면 ENTER은 13과 10을 키코드로 가진다. A 엔터를 치면 버퍼에 A와 개행문자가 있는 것이다. 따라서 KeyCode 변수에는 A, 즉 65가 저장되고 이후 코드에 따라 출력된다. a는 버퍼에 남아 있는 개행 키코드에 해당하는 13을 먼저 받고 출력한다. while문에 들어와서는 버퍼에 남은 10을 받아 출력한다. 이제 버퍼가 비었으므로 다시 입력을 받는다. q를 입력하면 q에 해당하는 키코드 113을 출력하고 if문에 따라 종료한다.

System.in.read()의 단점

  • 2개 이상 키가 조합된 한글을 읽을 수 없다.
  • 키보드로 입력된 내용을 통문자열로 읽을 수 없다.

Scanner

자바가 제공하는 Scanner 클래스를 이용하면 입력된 통문자열을 읽을 수 있다. Scanner 클래스는 사용자가 입력하는 키 값을 공백 문자를 기준으로 분리하여 토큰 단위로 읽는다.

그림6

  • System.in.read()와 달리 throws Exception이 필요 없고 import java.util.Scanner이 필요하다.
  • 문자열 비교시 equals() 메소드를 사용해야 한다.
    • 자바는 기본 타입(byte, short, int, long, float, double, boolean)의 값이 동일한지 비교할 때 ==를 사용하고 문자열이 동일한지 비교할 때는 equals() 사용
package sec01.exam02;

import java.util.Scanner;

public class booleanexample {

	public static void main(String[] args) {
		Scanner line = new Scanner(System.in);		
		String a = line.nextLine();
		if(a.equals("hello"))
			System.out.printf("%s", a);
		else
			System.out.printf("%s", "no");
				
	}

}

new는 객체생성연산자로 Scanner클래스의 객체를 만드는데 System.in은 키보드로부터 내용을 읽는다는 뜻이다. Scanner 클래스의 객체 line에는 이제 키보드로부터 받은 문자열을 담을 수 있다. nextLine은 키보드로부터 개행(엔터)를 받을 때까지 키보드로 입력받은 문자열을 반환한다.문자열을 읽어들이므로 String 변수로 받아야 한다. 이후의 변환을 원하면 타입.parse타입() 을 이용해서 변환하면 된다.

입력받은 타입을 미리 알고 있다면 다음과 같은 메서드를 사용할 수 있다.

  • next() : 다음 토큰을 문자열로 리턴
  • nextByte() : 다음 토큰을 byte 타입으로 리턴
  • nextShort() : 다음 토큰을 short 타입으로 리턴
  • nextInt() : 다음 토큰을 int 타입으로 리턴
  • nextLong() : 다음 토큰을 long 타입으로 리턴
  • nextFloat() : 다음 토큰을 float 타입으로 리턴
  • nextDouble() : 다음 토큰을 double 타입으로 리턴
  • nextBoolean() : 다음 토큰을 boolean 타입으로 리턴
  • nextLine() : \n을 포함한 한 라인을 읽고 \n 을 버린 나머지 문자열을 리턴
  • close() : Scanner 사용 종료
  • hasNExt() : 현재 입력된 토큰이 있으면 true, 아니면 입력될때까지 대기, ctrl + z 입력시 끝이므로 false 리턴

정리

  • System.in.read() : 키보드에서 입력된 키코드를 읽는다.
  • Scanner : 키보드로부터 입력된 내용을 통 문자열로 쉽게 읽기 위해서 사용한다.

본 포스팅은 ‘혼자 공부하는 자바’를 읽고 공부한 내용을 바탕으로 작성하였습니다.


© 2021. By Backtony