백엔드/Java의 정석

TIL 정리_02

ran4 2022. 2. 17. 23:56

printf(); 를 이용한 출력

기본 출력 : System.out.println();

printf(): > 같은 값이라도 다른 형식으로 출력가능

ex) 소수점 둘째자리까지만 출력하거나 정수를 16이나 8진수로 출력

System.out.printf("%.2f", 10./3);

 

**지시자(specifier)를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력가능

 

printf() 지시자 중에서 자주 사용되는 것

%b 불리언(boolean) 형식으로 출력

%d 10(decimal) 정수의 형식으로 출력

%o 8(octal) 정수의 형식으로 출력

%x %X 16진 정수의 형식으로 출력 (hexa-decimal) //정수

%f 부동 소수점(floating-point)의 형식으로 출력

%e %E 지수(exponent) 표현식의 형식으로 출력//실수

%c 문자(character)로 출력

%s 문자열(string)로 출력 //문자

JavaAPI > Fformatter 에 그 외의 지시자들도 있음

 

10진 정수로 출력할때는 %d를 사용 

System.out.printf("age:%d", age);

System.out.printf("age:%d", 14);

System.out.printf(age : 14);

 

출력하려는 값이 2개라면, 지시자도 2개를 사용해야하며 순서가 일치해야한다

System.out.printf("age:%d year%d", age, year);

System.out.printf("age:%d year%d", 14, 2017);

"age :14 year :2017" 출력

 

+printf(); 는 println();과 달리 출력 후 줄바꿈을 하지 않는다.

줄바꿈을 하려면 지시자 '%n'을 따로 넣어줘야 한다

System.out.printf(“age:%d”, age); // 출력 후 줄바꿈 x

System.out.printf(“age:%d%n”, age); // 출력 후 줄바꿈

 

정수를 출력할 때는 지시자 '%d'를 사용하는데, 출력될 값이 차지할 공간을 숫자로 지정할 수 있다.

여러 값을 여러 줄로 간격맞춰 출력할 때 꼭 필요한 기능이다. 

 

0과 '-'가 어떤 역할을 하는지?

system.out.printf(“[%5d]%n”, 10); >> [   10]

system.out.printf(“[%-5d]%n”, 10); >>[10   ]

system.out.printf(“{%05d}%n”, 10); >> [00010]

 

지시자 %x와 %o에 '#'를 사용하면 접두사 '0x'와 '0'이 각각 붙는다.

그리고 %x는 16진수에 사용되는 접두사영문자를 대문자로 출력한다 

 

Scanner : 화면에서 입력받기 

자바에서 화면으로부터 입력받는 방법은 여러가지가 있으며, 점점 편리한 방향으로 발전해왔는데

최신 방법은 JDK1.6부터 추가된 Console클래스를 이용하는 것이지만, 이클립스와 같은 IDE에서는 잘 동작하지 않는다.

그렇기에 이와 유사한 Scanner 클래스를 이용해 화면으로부터 입력받는다.

 

사용하기 전

import java.util.Scanner;를 추가

클래스 객체 생성

Scanner scanner = new Scanner(System.in); 

 

nextLine()이라는 메서드를 호출하면 입력 대기 상태에 있다가 입력을 마치고 엔터를 누르면 문자열로 반환된다

입력받은 메서드를 숫자로 변환하려면 Integer.parseInt();메서드를 이용해야한다. //int타입의 정수로 변환 

String input = scanner.nextLine(); //입력받은 내용을 input에 저장

int num = Integer.parseInt(input); //입력받은 내용을 int 타입의 값으로 변환

 

Scanner 클래스에는 nextInt()나 nextFloat()와 같이 변환없이 숫자로 바로 입력받을 수 있는 메서드들이 있다.

int num : scanner.nextInt();

그러나 이 메서드들은 화면에서 연속적으로 값을 입력받아 사용하기에 까다롭기 때문에

nextLine();으로 입력받아 적절히 변환하는 것이 낫다.

 

정수형 (int short long byte)

정수형 타입의 연산과정에서 해당 타입이 표현할 수 있는 값의 범위는 넘어서는 것을 오버플로우(overflow)라고 한다

에러가 발생하는 것은 아니지만, 예상했던 결과를 얻지 못한다.

 

실수형(float, double)

실수형은 정수형과 다르게 오버플로우가 발생하면 변수의 값이 무한대(infinity)가 되며

실수형으로 표현할 수 없는 아주 작은 값인 경우 언더플로우가 발생한다. 이때의 값은 0이 된다.

 

***형변환(casting, 캐스팅)***

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는것이다.

(타입)피연산자 형식이다 //(int)d;

형변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 변환&반환하기 때문에 값에는 변화가 없다.

 

기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다

변환 수식 결과
int -> char (char)65 'A'
char -> int (int)'A' 65
float -> int (int) 1.6f 1
int -> float (float) 10 10.0f

자동 형변환 

형변환을 생략하면 컴파일러가 자동적으로 형변환을 한다

'기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다'

형변환이 가능한 방향은

byte - short (=char) - int - long - float - double 순서이다 //boolean은 형변환x

 

정리하자면 

1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다

2. 기본형과 참조형은 서로 형변환 할 수 없다.

3. 서로 다른 타입의 변수간의 연산은 형변환을 하는것이 원칙이나,

값의 범위가 작은 타입>큰 타입은 생략 가능하다

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_06  (0) 2022.02.21
TIL 정리_05  (0) 2022.02.21
TIL 정리_04  (0) 2022.02.19
TIL 정리_03  (0) 2022.02.18
TIL 정리 _01(Java)  (0) 2022.02.16