[Java] 변수와 시스템 입출력

soheeoott·2021년 9월 5일
0

Java

목록 보기
7/12

프로그래밍 언어에는 시스템 표준 출력 장치와 시스템 표준 입력 장치가 있다.
▪︎ 표준 출력 장치 : 모니터 (System.out)
▪︎ 표준 입력 장치 : 키보드 (System.in)


시스템 입력

System.in

프로그램에서 키보드로 입력한 데이터를 받기 위해 사용한다.
키보드로부터 키의 코드를 읽는다.

키코드

키보드의 키를 숫자로 대응시킨(매핑) 것을 의미한다.
키보드로 키를 입력하면 숫자로 된 키코드를 읽는다.

키보드로 A를 입력하면 프로그램에서는 65라는 값으로 읽는다.
시스템이 가지고 있는 표준 입력 장치 read()를 사용한다.
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 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"
종료


시스템 출력

System.out

프로그램에서 모니터로 무언가를 출력하고자할 때 사용한다.

다양한 출력 메소드

메소드 의미
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으로 채움

혼공자 강의를 기반으로 작성하였습니다. 🙏
13강 14강

profile
📚 글쓰는 습관 들이기 📚

0개의 댓글