Java 상수 2

2021. 5. 15. 00:38Java

실수형 리터럴의 예


타입의 불일치

리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는것은 허용된다.

예를 들어, double타입에 float리터럴타입을 넣어줘도 에러없이 작동된다 !!

      double f = 3.14f; O // float d = 3.14d; X

반대로 float타입에 double리터럴을 작동하면? 컴파일 에러가 뜬다!!

double은 8byte 총 64bit인데 float은 4byte 총 32bit입니다.

큰타입에 작은 리터럴타입을 넣어줘도 상관은 없지만, 작은 타입에 큰 리터럴은 안된다 이말입니다!


문자 리터럴과 문자열 리터럴

'A'와 같이 작은 따옴표로 문자 하나를 감싼 것을 문자 리터럴이라고한다. 두문자 이상은 큰따옴표로 감싸야하면 문자열 리터럴 이라고한다.

  • 문자열은 문자의 연속된 나열이라는 뜻이며, 영어로 String이라고 한다.
char ch = 'J';  // O

char ch = "J"; // J를 큰 따옴표로 감싸서 X
char ch = 'Java'; // 문자열을 작은 따옴표로 감싸서 X

/* char타입에 큰따옴표 사용 X, 
	 작은 따옴표를 문자열로 감싸는것도 X 
	 
	 올바른 사용 */

char ch = 'J'; // O 
String ch = "Java"; // O
char타입의 변수는 단 하나의 문자만 저장할 수 있으므로, 여러 문자(문자열)를 저장하기위해서는 String타입을 사용해야 한다.
문자열 리터럴은 ""안에 아무런 문자도 넣지 않는 것을 허용하며, 이를 빈 문자열(Empty String)이라고 한다. 그러나 문자 리터럴은 반드시 ' ' 안에 하나의 문자가 있어야한다.

String str = ""; 사용가능. 
char ch = ''; 사용불가 ''안에는 반드시 하나의 문자가 필요함.
char ch = ' '; 사용가능 공백문자(Blank)로 변수 ch를 초기화.

-  원래 String은 클래스이므로 아래와 같이 객체를 생성하는 연산자 new를 사용해야하지만 특별히 위와 같은 표현도 가능합니다!
String name = new String("Java"); String객체를 생성

덧셈 연산자(+)는 피연산자가 모두 숫자일 때는 두수를 더하지만, 피연산자 중 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합한다. 기본형과 참조형의 구별 없이 어떤 타입의 변수도 문자열과 덧셈연산을 수행하면 그 결과가 문자열이 되는 것이다.

문자열 + any type → 문자열 + 문자열 → 문자열
any type+ 문자열 → 문자열 + 문자열 → 문자열

예를들어 7 + "7"을 계산할 때 7이 String이 아니므로, 먼저 7을 String으로 변환한 다음 "7" + "7" 을 수행하여 "77"을 결과로 얻는다. 다음은 문자열 결합의 몇가지 예를 보여준다.

  1. 7 + " " → "7" + " " → "7 " 7뒤 Blank
  2. " " + 7 → " " + "7" → " 7" 7앞 Blank
  3. 7 + "7" → "7" + "7" → "77"
  4. 7 + 7 + "" → 14 + "" → "14"
  5. "" + 7 + 7 → "7" + 7 → "7" + "7" → "77"
  6. true + "" → "true" + "" → "true"
  7. null + "" → "null" + "" → "null"
덧셈 연산자는 왼쪽에서 오른쪽의 방향으로 연산을 수행하기 떄문에 결합 순서에 따라 결과가 달라진다는 것에 주의하자 !

형식화된 출력 - Printf()

지금까지 화면에 출력할 때 println()을 써왔는데, println()은 사용하기엔 편하지만 변수의 값을 그대로 출력하므로, 값을 변화하지 않고는 다른 형식으로 출력할 수 없다. 같은 값이라도 다른 형식으로 출력하고 싶을때가 있다. 예를들면 소수점 둘쨰자리까지만 출력한다던가, 정수를 16진수나 8진수로 출력한다던가. 이럴 때 printf()를 사용하면 된다. printf()는 지시자(specifier)를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능을 가지고 있다. 지시자는 값을 어떻게 출력할 것인지를 지정해주는 역할을 한다. 정수형 변수에 저장된 값을 10진 정수로 출력할 때는 지시자 %d를 사용하며, 변수의 밧을 지정된 형식으로 변화해서 지시자대신 넣는다. 예를 들어 int타입의 변수 age의 값이 14일 때 printf()는 지시자 %d 대신 14를 넣어서 출력한다.

printf - age: 14

Q: 만약 출력하는 값이 2개면 어떻게 해야돼? A: 지시자를 두개 쓰면됩니다.

출력하는 값이 2개라면, 지시자도 2개를 사용해야하며 출력될 값과 지시자의 순서는 일치해야한다. 물론 3개 이상의 값도 지시자를 지정해서 출력할 수 있으며 개수의 제한은 없다.

2개의 지시자를 이용한 예

printf - age: 26, year: 1996

%n을 이용한 줄바꿈을 활용한 예

age: 26 year: 1996

%n을 이용한 줄바꿈

%n대신 \n을 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 때문에 %n을 사용하는 것이 안전빵 ! /println()에 사용해봤으나 오류뜸 예상으론 printf()만 가능한 것 같음(추측에 불과함)

자주 사용되는 printf() 지시자

 

'Java' 카테고리의 다른 글

Java 진법 2  (0) 2021.05.26
Java 진법 1  (0) 2021.05.25
Java 상수 1  (0) 2021.04.30
Java 화면에서 입력받기(Scanner)  (0) 2021.04.29
Java 변수의 타입  (0) 2021.04.28