Java Category/Java

[JAVA] 시스템 입출력

ReBugs 2022. 12. 24.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


프로그래밍 언어에는 시스템 표준 출력 장치와 표준 입력 장치가 있다.

일반적으로 표준 출력 장치는 모니터이고, 표준 입력 장치는 키보드이다.

자바에서 System.out은 시스템의 표준 출력 장치를 말하고, System.in은 표준 입력 장치를 뜻한다.

 

시스템 출력

출력장치 out은 다음과 같은 메소드를 제공한다.

메소드 의미
println(내용); 괄호 안의 내용을 출력하고 행을 바꿔라
print(내용); 괄호 안의 내용을 출력해라
print("형식문자열"); 괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라

print("형식문자열"); -> 어렵게 생각할 필요 없다. 보통 첫 프로그래밍 언어로 C언어를 먼저 배우니 C언어에서 출력할 때 사용했던 문법과 거의 유사하다.

 

기본적으로 %d는 정수, %f는 실수, %s는 문자열을 받는다.

System.out.printf("%d %f %s", 2022, 20.22, "굿바이"); // 정수, 실수, 문자열을 차례대로 출력
//2022 20.220000 굿바이

좀 더 자세히 파고들면

  • %와 변환 문자는 생략할 수 없다.
  • 변환문자는 %d는 정수, %f는 실수, %s는 문자열을 받는다.
  • 값의 순번(argument_index$)은 몰라도 된다.(내 기준)
  • flags(-,+)에 -를 넣으면 오른쪽이 공백으로 채워짐, + 또는 생략을 하면 왼쪽이 공백으로 채워짐
  • 전체 자릿수(width)는 표현할 전체 자릿수를 뜻함
  • 소수 자릿수(.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)
줄 바꿈
%


%
public static void main(String[] args) {
		int value = 123;
		System.out.printf("%d\n", value);
		System.out.printf("%6d\n", value);
		System.out.printf("%-6d\n", value);
		System.out.printf("%06d\n", value);

		double area = 3.14159 * 10 * 10;
		System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area);

		String name = "홍길동";
		String job = "도적";
		System.out.printf("%6d | %-10s | %10s\n", 1, name, job);
	}
    
//   123
//   123
//123   
//000123
//반지름이 10인 원의 넓이:    314.16
//     1 | 홍길동        |         도적

 

시스템 입력

System.in.read()의 단점이 너무 치명적이고 불편하기에 생략한다

여기서는 스캐너만 다루겠다.

Scanner scanner = new Scanner(System.in);
Scanner scanner는 Scanner 타입의 변수 scanner를 선언
new Scanner(System.in)는 입력을 받는 Scanner객체를 생성했다는 뜻
합쳐서 해석하면 Scanner타입의 scanner라는 변수가 새로 생성된 Scanner 객체를 가리키고 있다는 뜻
그냥 동적할당 했다는 뜻인것 같다.(C언어적 해석)(자바는 어차피 C++기반으로 만들어졌으니 상관없지 않을까?)

inputData = scanner.nextLine();
inputData라는 변수에 scanner변수가 가리키고 있는 객체의 nextLine()이라는 메소드 실행(이 또한 C언어적 해석)
Scanner객체의 메소드엔 nextLine()이라는 메소드가 있는데, 이 메소드는 엔터키가 입력되기 전까지 대기 상태가 되며, 엔터키가 입력되면 입력된 모든 내용을 문자열로 읽고 리턴함

또한 Scanner를 이용하려면 모듈을 추가해야한다.

Scanner가 포함된 모듈을 추가하려면 패키지 선언과 클래스 선언 사이에 import문으로 선언해주면 된다.

 

또한 자바는 기본타입의 값이 동일한지 비교할 때는 ==를 사용하고, 문자열이 동일한지 비교할 때에는 equals()메소드를 사용한다.

 

위의 내용이 뭔 소리인지 이해가 안 간다면 아래의 예제를 보면 조금은 더 이해가 될 수 있다.

package TestPakage; //패키지 선언
import java.util.Scanner; //스캐너를 사용하기 위한 모듈 선언
public class Test { //클래스 선언
	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")) { // 입력된 문자열이 q라면 
				break; // 반복문 탈출
			}
		}
		
		System.out.println("종료");
	}
}
/*
출력 결과
가나다라
입력된 문자열 :  "가나다라"
마바사하
입력된 문자열 :  "마바사하"
자차카타
입력된 문자열 :  "자차카타"
파하
입력된 문자열 :  "파하"
ㅂ
입력된 문자열 :  "ㅂ"
q
입력된 문자열 :  "q"
종료
*/

 

'Java Category > Java' 카테고리의 다른 글

[JAVA] 참조 타입과 참조 변수  (0) 2022.12.26
[JAVA] 연산자  (2) 2022.12.25
[JAVA] 타입 변환(형 변환)  (0) 2022.12.23
[JAVA] 기본 타입  (0) 2022.12.22
프로그래밍 언어와 자바(with JVM)  (0) 2022.12.22

댓글