프로그래밍 언어에는 시스템 표준 출력 장치와 시스템 표준 입력 장치가 있다.
▪︎ 표준 출력 장치 : 모니터 (System.out)
▪︎ 표준 입력 장치 : 키보드 (System.in)
프로그램에서 키보드로 입력한 데이터를 받기 위해 사용한다.
키보드로부터 키의 코드를 읽는다.
키보드의 키를 숫자로 대응시킨(매핑) 것을 의미한다.
키보드로 키를 입력하면 숫자로 된 키코드를 읽는다.
키보드로 A를 입력하면 프로그램에서는 65라는 값으로 읽는다.
시스템이 가지고 있는 표준 입력 장치 read()를 사용한다.
read() 메소드는 키보드로부터 키 코드값을 읽는다.
System.in.read();
▪︎ System : 시스템이 가지고 있는
▪︎ in : 입력 장치에서
▪︎ read() : 입력된 키코드를 읽는다.
키를 누른 뒤 반드시 엔터를 입력해야 입력된 키에 대한 키코드를 읽을 수 있다.
예러가 발생할 수 있으므로 예외 처리가 필요하다.
read() 메소드를 한 번 더 호출하면 엔터의 키코드 값이 출력된다.
// 예외 처리 : throws Exception
public static void main(String[] args) throws Exception {
int keyCode;
keyCode = System.in.read();
System.out.println(keyCode);
keyCode = System.in.read();
System.out.println(keyCode);
}
A (엔터)
// 65
// 10
반복문을 통해 입력 받기
소문자 q를 입력하면 반복문을 종료한다.
public static main(String[] args) throws Exception {
int keyCode;
while(true){
keyCode = System.in.read();
System.out.println("keyCode : " + keyCode);
if(keyCode == 113) { // q
break;
}
}
}
▪︎ 한 키의 키코드 값만 읽을 수 있다.
▪︎ 한글과 같이 여러 키가 조합된 문자는 읽을 수 없다.
한 → ㅎ + ㅏ + ㄴ
▪︎ 숫자값으로 출력되므로 키보드로 입력된 내용을 문자열로 읽을 수 없다.
키보드로부터 입력된 내용을 통 문자열로 쉽게 읽을 수 있다.
쉽게 키보드로부터 데이터를 입력받기 위해 사용한다.
Scanner scanner = new Scanner(System.in);
▪︎ Scanner scanner
: 변수 선언
▪︎ new Scanner(System.in);
: Scanner를 생성한다.
▪︎ scanner
: 생성된 Scanner를 변수에 저장한다.
nextLine()
String inputData = scanner.nextLine();
▪︎ nextLine()
: 엔터 키 이전까지 입력된 문자열을 읽는다.
반복문을 통해 입력 받기
소문자 q를 입력하면 반복문을 종료한다.
import java.util.Scanner; // import 필요
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inputData;
while (true) {
inputData = scanner.nextLine();
System.out.println("입력된 문자열 : \"" + inputData + "\"");
if (inputData.equals("q")) {
break;
}
}
System.out.println("종료");
}
}
안녕
입력된 문자열 : "안녕"
q
입력된 문자열 : "q"
종료
프로그램에서 모니터로 무언가를 출력하고자할 때 사용한다.
메소드 | 의미 |
---|---|
println(내용) | 괄호 안의 내용을 출력하고 행을 바꾼다. |
print(내용) | 괄호 안의 내용을 출력만 한다. |
printf("형식 문자열" , 값!, 값2, ...) | 괄호 안의 첫 번째 문자열 형식대로 출력된다. |
println()
괄호 안에 출력할 내용(리터럴)을 넣으면 그대로 출력된다.
변수를 넣으면 변수에 저장된 값이 출력된다.
System.out.println(리터럴 또는 변수);
▪︎ System
: 시스템이 가지고 있는
▪︎ out
: 출력 장치로
▪︎ println()
: 괄호 안의 내용을 출력하고 행을 바꾼다. (개행)
printf() 메소드
형식화된 문자열로 (formal string) 출력한다.
전체 출력 자리수와 소수 자릿수를 제한할 수 있다.
값을(값1, 값2) 형식화된 문자열로 출력한다.
System.out.printf("형식문자열", 값1, 값2, ...);
%
와 conversion
외에는 모두 생략 가능하다.
% [argument_index$] [flags] [width] [.precision] conversion
값의 순번 (argument_index$)
값1, 값2.. 들이 형식 문자열의 몇 번째에 위치할지를 작성한다.
값이 2개 이상인 경우 값의 순번(argument_index$)을 표시해야 한다.
생략하면 작성된 순서대로 형식 문자열에 대입된다.
첫번째 값은 1번이 되고, 두번째 값은 2번이 된다.
System.out.printf("이름 : %1$s, 나이 : %2$d", "홍길동, 7);
flags
전체 자릿수(width)가 값의 길이(값1, 값2,..)보다 클 경우 빈 공간을 어떻게 채울지 결정한다.
생략한 경우 값이 오른쪽으로 정렬된다.
flag는 -와 0이 올 수 있다.
▪︎ - : 값을 왼쪽으로 정렬한다.
▪︎ 0 : 비어있는 공간을 0으로 채운다.
conversion
변환 문자이다.
값의 타입에 따라 작성해야 하는 변환 문자가 다르다.
d(정수), f(실수), s(문자열)
System.out.println("이름 : %s", "홍길동"); // 이름 : 홍길동
System.out.printf("나이 : %d", 7); // 나이 : 7
다양한 형식 문자열
10은 전체 자릿 수 (width)을 의미하고, .2는 소수점 이하(.precision)를 의미한다.
형식화된 문자열 | 설명 | 출력 형태 | |
---|---|---|---|
정수 | %d %6d %-6d %06d |
정수 6자리 정수, 왼쪽 빈 자리 공백 6자리 정수, 오른쪽 빈 자리 공백 6자리 정수, 왼쪽 빈 자리 0 채움 |
123 ___123 123___ 000123 |
실수 | %10.2f %-10.2f %010.2f |
소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈 자리 공백 소수점 이상 7자리, 소수점 이하 2자리, 오른쪽 빈 자리 공백 소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈 자리 0 채움 |
____123.45 123.45____ 0000123.45 |
문자열 | %s %6s %-6s |
문자열 6자리 문자열, 왼쪽 빈 자리 공백 6자리 문자열, 오른쪽 빈 자리 공백 |
abc ___abc abc___ |
특수문자 | \t \n %% |
탭(tab) 줄 바꿈 % |
% |
int value = 1000;
System.out.printf("상품의 가격 : %d원\n", value);
System.out.printf("상품의 가격 : %6d원\n", value);
System.out.printf("상품의 가격 : %-6d원\n", value);
System.out.printf("상품의 가격 : %06d원\n", value);
상품의 가격 : 1000원
상품의 가격 : 1000원 // 6d : 전체 자릿수 6, 오른쪽 정렬
상품의 가격 : 1000 원 // -6d : 전체 자릿수 6, 왼쪽 정렬
상품의 가격 : 001000원 // 06d : 전체 자릿수 6, 공백을 0으로 채움