변수
변수란
단 하나의 값을 저장할 수 있는 메모리 공간
변수의 명명 규칙
대소문자가 구별되며 길이에 제약이 없다. True와 true는 서로 다른 것으로 간주된다.
예약어를 사용하면 안 된다. true는 예약어라서 사용할 수 없지만, True는 가능하다.
숫자로 시작해서는 안 된다. top10은 허용되지만, 7up은 허용되지 않는다.
특수문자는 '_'와 '$'만 허용한다. $harp은 허용되지만, S#arp은 허용되지 않는다.
권장하는 규칙
클래스 이름의 첫 글자는 항상 대문자로 한다. 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다. ex) lastIndexOf, StringBuffer
상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다. ex) PI, MAX_NUMBER
2. 변수의 타입
기본형(primitive type) - 논리형(boolean), 문자형(cahr), 정수형(byte, short, int, long), 실수형(float, double) 계산을 위해 실제 값을 저장한다. 모두 8개 참조형(reference type) - 객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입
참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다.
ex) Date클래스
Date today = new Date();
기본형(primitive type)
논리형
boolean
문자형
char
정수형
byte
short
int
long
실수형
float
double
*boolean을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능하다.
기본형 범위
boolean
false, true
1
char
'\u0000'~'\uffff' (0~216-1, 0~65535)
2
byte
-128~127 (-27~27-1)
1
short
-32,768~32,767 (-215~215-1)
2
int
-2,147,483,648~2,147,483,647 (-231~231-1)
4
long
-9,223,372,036,854,775,808~9,223,372,036,854,775,807 (-263~263-1)
8
float
1.4E-45~3.4E38 (1.4x10-45~3.4x1038)
4
double
4.9E-324~1.8E308 (4.9x10-324~1.8x10308)
8
실수형은 정수형과 저장형식이 달라서 같은 크기라도 훨씬 큰갑을 표현할 수 있으나 오차가 발생할 수 있다. 따라서 실수형에서는 범위 뿐만 아니라 정밀도도 타입 선택의 중요한 기준이 된다.
정밀도
float : 7자리
double : 15자리
상수와 리터럴
상수
final int MAX_SPEED = 10;
변수의 타입 앞에 키워드'final'을 붙여준다.
반드시 선언과 동시에 초기화해야 한다.
상수의 값을 변경하는것이 허용되지 않는다.
리터럴
int year = 2022;
final int MAX_SPEED = 10;
위의 초록색 부분을 리터럴이라 한다.
프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의했기 때문에 이와 구분하기 위해 상수를 _리터럴_이라는 다른 이름으로 불러야만 했다.
리터럴의 타입과 접미사
논리형
false, true
없음
정수형
123, 0b0101, 077, 0xFF, 100L
L
실수형
3.14, 3.0e8, 1.4f, ox1.op-1
f, d
문자형
'A', '1', '\n'
없음
문자열
"ABC", "123", "A", "true"
없음
int small = 100;
long big = 100_000_000_000L;
float pi = 3.14f;
double rate = 1.618d;
float pi = 3.14; //에러. float타입 변수에 double타입 리터럴 지정 불가
double rate = 1.618; //OK
타입이 달라도 저장범위가 넓은 타입에서 좁은 타입의 값을 저장하는 것은 허용된다.
int i = 'A'; // OK. 유니코드인 65가 변수 i에 저장된다. long l = 123; // OK. double d = 3.14f; // OK.
문자 리터열과 문자열 리터열
문자열 리터럴은 ""안에 아무런 문자도 넣지 않는 것을 허용하지만 문자 리터럴은 반드시 ''안에 하나의 문자가 있어야 한다.
String str = ""; // OK.
char ch = ''; // 에러.
char ch = ' '; // OK. 공백 문자(blank)로 변수 초기화
덧셈 연산자(+)는 어느 한 쪽이 String이면 나머지 한쪽을 String으로 변환한 다음 결합한다. 따라서 기본형 타입 값을 문자로 변환할 때 빈 문자열("")을 더해주면 된다. ex) 7 + " " -> "7 " " " + 7 -> " 7" 7 + "7" -> "77"
형식화된 출력 - printf()
%b
boolean 형식으로 출력
%d
정수 형식으로 출력
%o
8진수 정수의 형식으로 출력
%x 또는 %X
16진수 정수의 형식으로 출력
%f
소수점 형식으로 출력
%c
문자형식으로 출력
%s
문자열 형식으로 출력
%n
줄바꿈 기능
%e 또는 %E
지수 표현식의 형식으로 출력
'%n' 대신 '\n'을 대신 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 떄문에 '%n'을 사용하는 것이 더 안전하다.
3. 형변환
기본형과 참조형간의 형변환은 불가능하다.
자동 형변환
표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에 표현범위가 더 넓은 쪽으로 형변환된다.
char와 short는 둘 다 2byte의 크기 이지만 범위가 서로 달라서 자동 형변환이 수행될 수 없다.
Last updated