Chapter 02 변수(Varialbe)
2. 변수의 타입
println()
은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 같은 값이라도 다른 형식으로 출력하고 싶을 때가 있다. 예를 들면, 소수점 둘째자리까지만 출력한다든가, 정수를 16진수나 8진수로 출력한다든가. 이럴 때 printf()
를 사용하면 된다.
printf()
는 '지시자(specifer)'를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능을 가지고 있다. '지시자'는 값을 어떻게 출력할 것인지 지정해주는 역할을 한다. 정수형 변수에 저장된 값을 10진 정수로 출력할 때는 지시자 '%d'를 사용하며, 변수의 값을 지정된 형식으로 변환해서 지시자대신 넣는다. 예를 들어 int타입의 변수 age
의 값이 14일 때, printf()
는 지시자 '%d'대신 14를 넣어서 출력한다.
System.out.prinf("age:%d", age);
➡️ System.out.prinf("age:%d", 14);
➡️ System.out.prinf("age:14"); // "age:14"가 화면에 출력된다.
만일 출력하려는 값이 2개라면, 지시자도 2개를 사용해야하며 출력된 값과 지시자의 순서는 일치해야 한다. 물론 3개 이상의 값도 지사자를 지정해서 출력할 수 있으며 개수의 제한은 없다.
println()
과 달리 printf()
는 출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 따로 넣어줘야 한다.
'\n'을 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 때문에 '%n'을 사용하는 것이 더 안전하다.
정수를 출력할 때는 지시자 '%d'를 사용하는데, 출력된 값이 차지할 공간을 숫자로 지정할 수 있다. 여러 값을 여러 줄로 간격 맞춰 출력할 때 꼭 필요한 기능이다.
long finger = 10;
System.out.prinf("finger = [%5d]%n", hex); // finger = [ 10]
System.out.prinf("finger = [%-5d]%n", hex); // finger = [10 ]
System.out.prinf("finger = [%05d]%n", hex); // finger = [00010]
지시자 '%x'와 '%o'에 '#'를 사용하면 접두사 '0x'와 '0'이 각각 붙는다. 그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다.
long hex = 0xFFFF_FFFF_FFFF_FFFFL;
System.out.prinf("hex = %x%n", hex); // hex = ffffffffffffffff
System.out.prinf("hex = %#x%n", hex); // hex = Oxffffffffffffffff
System.out.prinf("hex = %#X%n", hex); // hex = OXFFFFFFFFFFFFFFFF
10진수를 2진수로 출력해주는 지시자는 없기 때문에, 정수를 2진 무자열로 변환해주는 Integer.toBinaryString(int i)
를 사용해야 한다. 이 메서드는 정수를 2진수로 변환해서 문자열로 반환하므로 지시자 '%s'를 사용했다.
int binNum = 0b10; // 2진수 10, 10진수로는 2
System.out.printf("binNum=%s%n", Integer.toBinaryString(binNum));
그리고 C언어에서는 char타입의 값을 지시자 '%d'로 출력할 수 있지만, 자바에서는 허용되지 않는다. 아래와 같이 int타입으로 형변환해야만 '%d'로 출력할 수 있다.
char c = 'A';
System.out.printf("c=%c, %d %n", c, (int)c); // 형변환이 꼭 필요하다.
// "c=A, 65"이 화면에 출력된다.
실수형 값의 출력에 사용되는 지시자는 '%f', '%e', '%g'가 있는데, '%f'가 주로 쓰이고, '%e'는 지수형태로 출력할 때, '%g'는 값을 간략하게 표현할 때 사용한다.
'%f'는 기본적으로 소수점 아래 6자리까지만 출력한다.
📑 원본 자료
- Java의 정석(3판) [남궁 성/도우출판/2016]