본문 바로가기
IT 돌고래/JAVA

[JAVA]자바의 여섯걸음 : 입력과 출력

by IT돌고래 2020. 1. 20.
반응형

안녕하세요.

IT 돌고래입니다.

자바의 콘솔에 입력과 출력에 대해서 이야기를 해보겠습니다.

 

1. 출력

자바에서 출력을 하기 위해서는 출력 함수를 사용을 해야 합니다.

자바의 출력 함수는 여러 개가 있지만 그중에 많이 쓰이는 3가지 출력 함수를 말씀을 드리겠습니다.

 

System.out.print("IT");      //IT가 출력이 된다.
System.out.println("돌고래"); //IT 뒤에 돌고래가 같이 출력이 된다. 
System.out.printf("%s","삶"); // IT 돌고래 개행이 되서 밑에 삶이 추가되서 출력이 된다.
//IT 돌고래
//삶

위에 소스를 보면 3가지를 많이 사용을 합니다.

System.out.print() : 소괄호 안에 내용을 넣으면 그 문자열이 그대로 출력한다.

System.out.println() : 소괄호 안에 내용을 넣으면 그 문자열이 그대로 출력이 되고 개행이 되어서 한 줄을 내려가게 된다.

System.out.printf() : 소괄호 안에 % 연산자(형식 지정자)와 같이 정수인지 실수인지 문자인지 문자열인지 정의를 해주고 쉼표 뒤에 자료형이 맞는 데이터를 넣어주면 치환이 돼서 출력이 된다.

 

int a = 10;
int b = 20;

System.out.print("a + b = " + a + b +"\n");  // a + b = 1020  개행
System.out.print("a + b = " + (a + b) +"\n"); // a + b = 30   개행
System.out.println("a + b = " + a + b); // a + b = 1020 개행
System.out.printf("a / b = %.2f",((float)a/(float)b)); // a / b = 0.20
System.out.printf("a / b = %.2f\n",((float)a/(float)b)); // a / b = 0.20 개행 

위에 소스를 보면 System.out.print와 System.out.println은 문자열과 숫자를 연결해서 하나의 문자열로 만들어서 출력이 되는 것을 알 수가 있습니다.

이상한 점은 a+b를 해서 30에 결과 값을 얻기를 원하는 데 문자열과 +연산을 하면 문자열로 바뀌어서 정수인 숫자가 그대로 문자열로 바뀌기 때문에 30이 아닌 1020으로 출력이 됩니다. 그렇기 때문에 소괄호를 쳐서 먼저 정수형 일 때 +연산을 실행을 한 이후에 문자열과 +연산을 하게 해야만 원하는 문자열이 정상적으로 출력이 되는 것을 알 수가 있습니다.

 

4번째 줄과 5번째 줄을 보시면 마지막에 "\n"이 추가가 되어 있는 것은 System.out.print의 경우 개행을 함수 자체가 해주지 않기 때문에 개행을 하라는 특수 문자를 표기해서 개행을 하시면 됩니다.

 

7번째 줄과 8번째 줄을 보면 "%.2f"라고 형식 지정자를 써서 실수의 값을 받아서 출력을 하게 됩니다.  "%f"이면 실수를 출력을 하게 됩니다. 하지만 앞에 .2가 들어가면 소수점 둘째 자리까지 출력을 해달라는 명령입니다.

형식 지정자를 이용해서 표현 자릿수를 선택해서 출력을 할 수가 있습니다.

 

많이 쓰는 특수문자

\b 출력을 할때 마지막문자를 지웁니다.(Backspace)
\t 탭의 크기만큼 띄워 쓰기를 시작합니다.(Tab)
\n 개행을 합니다.(Linefeed)
\f 시작위치를 다음페이지로 이동합니다.(Formfeed)
\r 문자를 한칸을 이동해서 시작합니다.(Carriage Return)
\\ 백슬러쉬를 출력합니다.(Backslash)
\' 작은따옴표를 출력합니다.(Single Quote)
\"

큰따옴표를 출력합니다, (Double Quote)

형식 지정자

%d 부호가 있는 10진수 출력을 합니다. (byte, short, int, long
%X, %x

16진수를 출력(양수만 가능)을 하고 X의 경우 대문자로 출력을 합니다.(int)

%o 양수 8의 진수를 출력을 합니다.(int)
%c 한 개의 문자 출력(char)
%f 고정 소수점 실수 출력(float)
%E, %e 부동 소수점 실수 출력 대문자 E의 경우 지수 문자로 'E'를 사용합니다.(double)
%G, %g 소수점 이하 자리수가 고정 또는 부동소수점으로 출력, 자리수가 짧은 것을 기준으로 선택해서 출력을 합니다. 대문자 G의 경우 지수 문자로 'E'를 사용합니다.(double)
%s 문자열 출력합니다.(String)
%% %를 출력합니다.

※ 문자열 + anytype이 되면 모두 문자열로 바뀌어서 하나의 문자열이 됩니다.

 

2. 입력

입력을 하려면 2개의 클래스를 사용해서 입력을 받을 수가 있습니다.

Scanner BufferReader를 사용해서 문자열이나 숫자를 입력을 받을 수 있습니다.

 

Scanner sc = new Scanner(System.in); // Scanner 객체를 생성 객체를 생성을 할때 System.in을 인자로 받아서 객체를 생성
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 

//1. inputStreamReader 객체를 만들때 생성자 인자에 System.in을 인자로 받아서 객체를 생성한다.
//2. BufferReader객체를 생성을 할때 InputStreamReader 객체를  BufferReader 생성자 인자에 넣어서 
//생성을 하게 됩니다.
//3. BufferReader 객체를 생성이 됩니다. 


int num = sc.nextInt();  //Scanner 객체인 sc를 사용해 숫자를 입력 받아서 num 변수에 값을 대입
String str = sc.next();  //Scanner 객체인 sc를 사용해 문자열을 입력 받아서 str 변수에 값을 대입
String str2 = bf.readLine(); 
//BufferReader 객체인 bf를 사용해 문자열을 입력 받아서 str2 변수에 값을 대입

위에 소스처럼 Scanner와 BufferReader를 사용하여 숫자나 문자열을 입력을 받을 때 사용을 하면 됩니다.

객체를 생성하는 부분이 나와서 자세히 주석을 달아서 설명을 했습니다. 객체를 만들어서 Scanner은 nextInt(), next()의 함수를 사용하고 BufferReader는 readLine()이라는 함수를 사용해서 입력을 받으시면 됩니다.

BufferReader는 문자열로 받기 때문에 숫자(정수)를 받을 때는 문자열로 입력을 받고 Integer.parseInt(문자열 변수)를 사용해서 문자열로 받은 값을 숫자로 바꿀 수 있습니다.

 

※ 문자열로 입력을 받을 때 숫자(정수)인 문자열인 경우에만 Integer.parseInt()를 사용해서 숫자(정수)로 변경을 할 수가 있습니다. 숫자가 아닌 경우에는 에러가 발생하고 프로그램이 종료를 합니다.

 

※ 긴 글을 읽어 주셔서 감사합니다. Java를 계속 진행해 나가겠습니다.

 

★ 이글 이후에는 Java 조건문에 대한 내용을 정리해서 처음부터 정리를 할 예정입니다. 많은 관심 부탁드립니다.

 

반응형

댓글