JAVA

자바의 기본 입출력

정코딩딩 2023. 10. 10. 19:22

System

표준 입력(키보드), 표준 출력(모니터) 및 오류 출력 기능을 제공합니다.
다음과 같은 클래스 멤버를 가지고 있습니다.

  • public static final InputStream in
  • public static final PrintStream out
  • public static final PrintStream err

System.out

출력 스트림에 다양한 데이터 값을 편리하게 출력하는 기능

System.out.println()

출력할 인자와 개행 정보를 표준 콘솔 장치에 전달하는 함수

System.out.print()

출력하고 줄바꿈 하지 않는 함수

System.out.printf("이름 : %1$s, 나이 : %2$d", "김자바", 25);
System.out.println();
System.out.printf("이름 : %1$s, 나이 : %2$d", 25, "김자바");

첫번째 코드는 이름과 나이가 제대로 출력되는 반면 아래 코드는 자리를 바꾸었더니 제대로 출력되지 않고 오류 메세지가 뜸을 확인할 수 있습니다.

System.err

  • System.out과 마찬가지로 PrintStream 타입의 객체 입니다.
  • 사용자의 즉각적인 주의가 필요한 오류 메시지를 표시하는데 사용 합니다.
  • Eclipse에서는 에러 텍스트의 색상을 빨간색으로 출력합니다.

System.in

  • 키보드와 연결된 자바의 표준 입력 스트림 입니다.
  • 입력되는 키를 바이트(문자 아님)로 리턴하는 저수준 스트림
  • 입력 버퍼에 저장되어 Backspace키를 이용한 편집도 가능합니다.
  • Enter키를 누르면 입력된 데이터를 읽어냅니다.
  • System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움 있습니다.

다음은 Scanner 클래스입니다.
Scanner 클래스는 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴합니다. java.base 모듈 내의 java.util 패키지에 정의되어 있습니다.
Scanner 는 객체를 생성해서 사용해야 합니다.

import java.util.Scanner //임포트 문 필요
...
Scanner a = new Scanner(System.in); //객체 생성

키보드에 연결된 System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴합니다.
Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽어옵니다. 여기서 공백 문자 는 ‘ ’, ‘\t’, ‘\f’, ‘\r’, ‘\n’ 가 있습니다.
개발자가 원하는 타입 값으로 쉽게 읽어올 수 있습니다.
다음은 scanner 를 이용한 예제 입니다.

import java.util.Scanner;

public class ScannerEx {
	public static void main(String args[]) {
		System.out.println("이름, 도시, 나이, 체중,독신 여부,주소를 빈칸으로 분리하여 입력하세요");

		Scanner scanner = new Scanner(System.in);
		
		
		String name = scanner.next(); 
		System.out.println("당신의 이름은 " + name + "입니다.");
		
		String city = scanner.next(); 
		System.out.println("당신이 사는 도시는 " + city + "입니다.");
		
		int age = scanner.nextInt(); 
		System.out.println("당신의 나이는 " + age + "살입니다.");
		
		double weight = scanner.nextDouble(); // 실수 토큰 읽기
		System.out.println("당신의 체중은 " + weight + "kg입니다.");
		
		boolean single = scanner.nextBoolean();
		System.out.println("당신은 독신 여부는 " + single + "입니다.");
		//위에 있는것들은 다 white space를 구분자로 사용하는데 밑에 있는 nextLine은 \\n을 구분자로 사용하기때문에 이런식으로 코드짜면 주소치기전에 엔터치면 걍 끝
		//해결하려면 밑에코드 하나 더 추가
		scanner.nextLine();
		
		String addr = scanner.nextLine();
		System.out.println("당신의 주소는 "+addr+"입니다.");
		
		scanner.close();
	}
}