변수

변수란

단 하나의 값을 저장할 수 있는 메모리 공간

변수의 명명 규칙

  1. 대소문자가 구별되며 길이에 제약이 없다. True와 true는 서로 다른 것으로 간주된다.

  2. 예약어를 사용하면 안 된다. true는 예약어라서 사용할 수 없지만, True는 가능하다.

  3. 숫자로 시작해서는 안 된다. top10은 허용되지만, 7up은 허용되지 않는다.

  4. 특수문자는 '_'와 '$'만 허용한다. $harp은 허용되지만, S#arp은 허용되지 않는다.

권장하는 규칙

  1. 클래스 이름의 첫 글자는 항상 대문자로 한다. 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.

  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다. ex) lastIndexOf, StringBuffer

  3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다. 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)

1byte2byte4byte8byte

논리형

boolean

문자형

char

정수형

byte

short

int

long

실수형

float

double

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

기본형 범위

자료형저장 가능한 값의 범위크기(byte)

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. 형변환

기본형과 참조형간의 형변환은 불가능하다.

자동 형변환

표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에 표현범위가 더 넓은 쪽으로 형변환된다.

charshort는 둘 다 2byte의 크기 이지만 범위가 서로 달라서 자동 형변환이 수행될 수 없다.

Last updated