표준입력(Standard Input)과 버퍼(Buffer)

Agnes Park·2022년 1월 22일
0

JAVA

목록 보기
9/34

1. 표준입력(Standard Input): 키보드로부터 입력

  • Scanner 객체 사용
package com.lec.java.input01;

import java.util.Scanner;
// scanner 사용하기 위해 해당 패키지 import 해야 함 (직접 입력 OR Scanner sc 마우스 갖다 대고 Quick Fix의 'Import 'Scanner' 클릭 OR 
// 메뉴 Source -> Organiza Imports

public class Input01Main {

	public static void main(String[] args) {
		System.out.println("표준입력 : Scanner 사용");
		
		Scanner sc = new Scanner(System.in);  
		
		// Scanner 를 사용한 입력 수행...
		int num1, num2;
		System.out.print("숫자1을 입력하세요: ");
		num1 = sc.nextInt();   // 키보드로부터 정수 한개를 입력받아서 리턴
		
		System.out.print("숫자2를 입력하세요: ");
		num2 = sc.nextInt();
		
		System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
		
		sc.close();   // Scanner 객체를 사용한 뒤에는 close() 해주자. (scanner 반납 매소드)
		// close() <-- 사용한 시스템 자원 (키보드, hw, 파일, 네트워크 등...) 을 시스템에 반납
		
		// 각 primitive 타입에 대해 nextXXX() 메소드 제공
//		sc.nextByte();
//		sc.nextShort();
//		sc.nextLong();
//		sc.nextFloat();
//		sc.nextDouble();
//		sc.nextBoolean();	
		
		System.out.println("프로그램 종료");
	}

}
  • 프로그램이 실행 중이라는 의미
  • 프로그램 실행 종료
  • 프로그래밍의 기본 루틴 : 입력(1) -> 처리(2) -> 출력(3)

2. 문자열(String), Character 입력

  • 문자열(String) 입력
  • Char 입력
package com.lec.java.input02;

import java.util.Scanner;

public class Input02Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("이름을 입력하세요: ");
		String name = sc.nextLine();  // ENTER 를 입력할때까지의 모든 문자들이 문자열로 리턴

		System.out.print("별명을 입력하세요: ");
		String nick = sc.nextLine();
		
		System.out.println("너의 이름은: " + name + "\n별명은:" + nick);
		
		// char 입력
		// nextChar() 는 없다!
		
		System.out.print("성별을 입력하세요 M/F: ");
		char gender = sc.next().charAt(0);
		System.out.println("성별은: " + gender);
		
//		next() 및 nextXXX() 공백 단위(토큰 단위)로 문자열을 읽기
//		nextLine()는 Enter 단위로 문자열 읽기
		
		System.out.print("나이를 입력하세요: ");
		int age = sc.nextInt();
		
		sc.nextLine();  // 숫자입력받고 문자열 입력시에는 반드시 nextLine()을 해줌으로 '\n' 을 버퍼에서 비워준다
		
		System.out.print("주소를 입력하세요: ");
		String addr = sc.nextLine();
		
		System.out.println("나이:" + age + "\n주소:" + addr);
		
		
		sc.close();
	}

}

버퍼(Buffer)

버퍼의 원리

  • 키보드가 입력하는 것을 버퍼에 쌓음
  • 버퍼에 입력한 것이 끝나면 CPU가 꺼내서 사용
  • 즉, 버퍼를 사용한 입력을 사용함 -> 입출력 속도와 컴퓨터 속도가 다르기 때문 -> 중간에 버퍼를 둬서 효율성을 높임
  • C & JAVA 에서는 신겨써야 함! (Python은 제외)

  • 이름 입력
  • 별명 입력
  • 성별 입력
  • next() : 공백(토큰 = 공백을 제거한 의미를 구분할 수 있는 최소한의 문자열) 단위로 읽기 때문에 '\n' 남음
  • nextInt() : 공백(토큰) 단위로 읽음. 이때, 맨 앞에 위치한 공백은 무시함
  • 다음 공백을 만날 때까지를 뽑아냄: 3 & 2
  • nextLine() : 이미 줄바꿈이 있기 때문에 '\n'을 가져가고 끝남
  • 해당 문자 해결하기 위해 중간에 sc.nextLine()을 추가하면 됨
    • 숫자 입력받고 문자열 입력시에는 반드시 nextLine()을 해줌으로 '\n' 을 버퍼에서 비워준다(consume)

3. nextLine() vs next()

package com.lec.java.input03;

import java.util.Scanner;

public class Input03Main {

	public static void main(String[] args) {
		System.out.println("nextLine() vs. next()");
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("여러 단어의 문장을 입력하세요 >");
		String in = sc.nextLine();
		System.out.println("in : " + in);

		
		System.out.print("여러 단어의 문장을 입력하세요 >");
		String in2 = sc.next();
		System.out.println("in2 : " + in2);
		
		String in3 = sc.next();
		System.out.println("in3 : " + in3);

		String in4 = sc.next();
		System.out.println("in4 : " + in4);
		
		sc.close();

	}
}
  • String in
  • String in2
  • String in3
  • String in4

4. 문자열 타입 -> 숫자 타입으로 변환

  • 일반적으로 프로그램에서 숫자입력하는 것이 처음에는 '문자열(String)' 형태다
    ex) 웹, 모바일앱..

  • 이를 숫자 타입으로 변환해야 산술 연산등이 가능해진다
    Integer.parseInt(문자열) --> int 로 변환
    Double.parseDouble(문자열) --> double 로 변환

    Byte.parseByte(문자열)
    Short.parseShort(문자열)
    Long.parseLong(문자열)
    Float.parseFloat(문자열)
    Boolean.parseBoolean(문자열)

  • 문자열이 해당 타입으로 변환할수 없는 문자열이면 NumberFormatException 예외 발생 (에러)

package com.lec.java.input04;

import java.util.Scanner;

public class Input04Main {

	public static void main(String[] args) {
		System.out.println("입력 문자열 -> 숫자 변환");
		
		Scanner sc = new Scanner(System.in);
		
		// 정수 3개를 문자열로 입력 받고 합을 구하기
		System.out.print("숫자 3개 (int, int, int)를 입력받으세요 >");	
		
		String in1 = sc.next();
		int i1 = Integer.parseInt(in1);  // 문자열 in1 을 int 로 변환
		int i2 = Integer.parseInt(sc.next());
		int i3 = Integer.parseInt(sc.next());  // <-> sc.nextInt()
		
		System.out.println("합: " + (i1 + i2 + i3));
		
		// 실수 3개를 문자열로 입력받고 곱을 구하기
		double d1 = Double.parseDouble(sc.next());  // 입력받은 문자열을 double 로 변환
		double d2 = Double.parseDouble(sc.next()); 
		double d3 = Double.parseDouble(sc.next()); // <-> sc.nextDouble()
		System.out.println("곱: " + (d1 * d2 * d3));
		
		sc.close();
	}
    
}

0개의 댓글