변수란
단 하나의 값을 저장할 수 있는 메모리 상의 공간
변수 선언과 초기화
변수타입 변수이름;
변수타입
저장될 값의 타입. 저장하고자 하는 값의 종류에 맞게 선택.
변수이름
메모리 상의 공간에 값을 저장했으므로, 그 메모리 공간에 이름을 붙여주는 것.
같은 이름의 변수가 여러개 존재한다면, 메모리 공간을 찾아 갈 수 없으므로 같은 이름의 변수가 여러개 있으면 안된다.
변수 선언
변수를 선언하면, 메모리의 빈 공간에 변수타입에 맞는 저장공간이 확보되며, 이 저장 공간은 변수 이름으로 접근 할 수 있다.
변수 초기화
- 변수를 선언했을 때, 메모리 공간에 쓰레기 값이 존재 할 수 있으므로 사용 전 초기화를 해야 한다.
- 지역 변수는 반드시 초기화 이후에 사용 할 수 있다. 변수 종류에 따라 초기화 없이 사용할 수 있는 변수도 있다.
- 클래스 변수와 인스턴스 변수는 초기화를 생략 할 수 있다.
변수 명명규칙
필수 규칙
- 대소문자가 구분되며 길이에 제한이 없다.
- 자바 예약어는 사용 할 수 없다. (true, default, super 등)
- 숫자로 시작할 수 없다.
- 특수문자는 '_'와 '$'만 허용한다.
선택 규칙
- 클래스의 첫글자는 대문자로 한다.
- 여러 단어로 이루어진 변수명은 첫글자를 대문자로 한다. (camelCase, PaskalCase)
- 상수의 이름은 모두 대문자로 한다. 여러 단어인 경우 '_'로 구분한다.
추가로, 자바의 모든 명명에는 유니코드 문자를 사용 할 수 있지만, 적어도 클래스 이름은 ASCII코드를 사용하여 작성하는것이 좋다. 유니코드를 인식하지 못하는 OS가 있기 때문이다.
변수 타입
값의 종류는 '문자'와 '숫자'로 나눌 수 있으며
이 중 '숫자'는 '정수'와 '실수'로 나눌 수 있다.
값의 종류에 따라 저장될 공간의 크기와 저장형식을 정의한것이 변수 타입이다.
- 문자형: char
- 정수형: byte, short, int, long
- 실수형: float, double
기본형과 참조형
JAVA는 C언어와 다르게 참조형 변수 간 연산이 불가능하므로 실제 연산은 모두 기본형 변수를 사용한다.
기본형 변수
- 문자형, 정수형, 실수형, 논리형(boolean) 총 8가지
- 실제 값을 저장한다.
문자형
문자형 변수타입 char는 내부적으로 유니코드인 정수를 저장한다.(2 bytes)
정수형 혹은 실수형과 연산도 가능하다.
논리형
크기를 1byte 사용한다.
논리형 변수타입 boolean은 다른 기본형과 연산이 불가능하다.
정수형
정수형은 byte(1 byte), short(2 bytes), int(4 bytes), long(8 bytes) 네가지를 제공한다.
int 타입이 CPU가 가장 효율적으로 사용되는 타입이므로 연산이 빠르지만, 메모리 절약을 위해 byte나 short의 선언을 고려해 볼 수 있다.
실수형
실수형은 float(4 bytes), double(8 bytes)이 사용된다.
정수형의 int 타입이 기본 자료형인 것 처럼, 실수형은 double 타입이 기본 자료형이다.
참조형 변수
클래스이름 변수이름;
- 기본형 변수를 제외한 나머지 타입
- 어떤 값이 저장된 주소를 값으로 갖는다.
- 변수의 타입으로 클래스의 이름을 사용.
- null 또는 객체의 주소(4 byte 정수)를 값으로 가진다.
상수와 리터럴
상수란
final 변수타입 변수이름 = 초기화;
- 변수와 같이 값을 저장 할 수 있는 공간이지만, 한번 값을 저장하면 변경 할 수 없다.
- 반드시 선언시 초기화 하여야 하며, 이후 값을 변경 할 수 없다. (JDK 1.6부터는 한줄로 초기화를 하지 않아도 사용 전에만 초기화를 하면 되도록 바뀌었다.)
리터럴
상수란 1, 20, 'A'와 같은 값을 의미하는데, JAVA에서 상수란 '값을 저장 하면 변경 할 수 없는 메모리 공간'이기 때문에, 리터럴이라는 용어를 사용한다.
정수형
접두사
2진수: 0b (JDK 1.7부터 추가)
8진수: 0
16진수: 0x
접미사
int타입: 접미사 없음
long타입: 접미사 'l' or 'L'
JDK 1.7부터 정수형 리터럴 중간에 구분자 '_'을 넣을 수 있게 되었다.
실수형
접미사
float타입: f
double타입: d (기본형으로 생략 가능)
float pi = 3.14; // 리터럴 3.14는 d가 생략된 double타입 리터럴이므로 에러.
문자와 문자열 리터럴
문자 리터럴
- 'A'와 같이 문자 하나를 감싼 것.
- 단 하나의 문자만 저장 가능.
- '' 안에 반드시 하나의 문자가 있어야 함.
문자열 리터럴
- String 클래스 사용, 객체지만 특별하게 변수 타입처럼 선언 가능.
- ""안에 아무런 문자도 넣지 않는 것 허용
- 덧셈 연산자(+)는 피연산자 중 한쪽이 String이면 나머지 한쪽을 먼저 String으로 변환 후 두 String을 결합한다.
- (EX. 7 + 7 + "7" = "147", 7+"7"+7+7 = "7777")