- 프로그램 실행 중에 1개의 값을 저장하기 위한
- 메모리 내의 임시 기억장소 (메모리 공간)
- 이름이 있다 - 변수명 (메모리 주소에 붙여진 이름)
- 기억장소 내에서의 주소가 있다
- 변수에 저장되는 값이 있다
- 저장되는 값의 유형(데이터 타입)이 있고 크기가 다르다
- 프로그램 실행 중에 저장된 값이 변경될 수 있다
- 주의! - 변수는 동일한 이름으로 한 번만 선언
- 두 번 선언하면 오류 (중복 선언 오류)
변수는
- 저장되는 값에 따라 유형(데이터 타입)이 있고
- 데이터 타입에 따라 크기가 다르다
주의!!!
- 변수 이름 사이에 공백을 포함할 수 없다 (띄어쓰기 하면 안된다)
- 자바 키워드
- 자바 시스템에서 지정하여 사용하는 단어 (이미 맡아놓은 단어)
- 클래스명, 메소드명, 각종 변수명으로 사용할 수 없음
- 모두 소문자로 되어 있음
- 변수를 사용하기 위해서는 반드시 변수를 선언해야 한다.
- 선언하지 않으면 오류 발생
- 변수명 cannot be resolved to a variable (변수를 선언하지 않고 사용하는 경우의 오류 메시지)
- 변수를 선언하는 이유
- 실행 중에 필요한 공간 할당 받기 위해
데이터 타입 변수명;
int a;
: 정수 타입 변수 a 선언, 4바이트
char c;
: 문자 타입 변수 c 선언, 2바이트
float f;
: 실수 타입 변수 f 선언, 4바이트
선언된 변수에 값 저장
변수명 = 값;
저장소 = 값;
- 변수 선언과 동시에 값 저장
주의!!
- 초기화 되지 않은 변수 사용 시 오류 발생
int value; // 선언만하고 초기화 안 했음
int result = value + 10; // 변수 value에 10을 더한 결과를 변수 result에 저장
The local variable value may not have been initialized // value가 초기화 되지 않았다고 오류 발생
int value = 30; // 초기화 한 후
int result = value + 10; // 변수 사용
- 프로그램 실행 중에 값을 저장하기 위한 메모리 내의 임시 기억장소
- 정해진 값을 가지며, 프로그램 실행 중 값이 변하지 않음
- final
키워드 사용
- 대문자로 선언
- 프로그램 실행 중에 값이 변해서는 안 되는 것을 상수로 선언
- 실수하지 않도록 상수로 선언하고 상수명으로 사용하면 잘못 입력 시 컴파일러가 오류로 알려줌
int price = 100; //변수
price = 200; // 변수는 값 변경 가능
final int PRICE = 1000; // final로 선언한 상수
PRICE = 2000; // 오류 - 상수값은 변경 불가능
PRIC * qty : 상수 스펠링 잘못 입력하면 컴파일러가 오류를 알려줌
- 변수에 저장되는 값
int x = 30; // 30; 리터럴
double pi = 3.14; // 3.14; 리터럴
정수 리터럴
- 0, 75, -100 : 소수점이 없는 정수 리터럴은 10진수
- 015 : 0으로 시작하는 정수 리터럴은 8진수
- 0x15 : 0x 또는 0X로 시작하는 리터럴은 16진수
- 0xAC08
실수 리터럴
- 0.25, -3.14 : 소수점이 있는 실수 리터럴 10진수
- 대문자 E가 있는 리터럴은 10진수 지수와 가수
- 5E7 // 5 x 107
- 0.12E-5 // 0.12 x 10-5
문자 리터럴
- 작은 따옴표(‘’)로 묶은 텍스트는 하나의 문자 리터럴
- ‘A’, ‘한’, ‘\t’, ‘\n’
특수 문자 (escape 문자)
- 역 슬래시()가 붙은 리터럴
- ‘\t’
: 수평 탭을 나타내는 특수문자
- ‘\n’
: 줄 바꿈을 나타내는 특수문자(개행문자)
문자열 리터럴
- 큰 따옴표(“”)로 묶은 텍스트는 문자열 리터럴
- “대한민국”, “name”, “홍길동”, “010-1234-5678”
- “탭 만큼 이동 \t
합니다” - 문자열 안에 특수문자 포함 가능
- “한 줄 내려 쓰기 \n
합니다”
논리 리터럴
- true, false 값
- 변수는 선언된 블록({ }) 내에서만 사용 가능
- 변수의 사용 범위, 위치를 결정해서 선언
기본 타입 (기본형)
- 문자 타입 (1개) : char (교재에서는 정수 타입으로 분류)
- 정수 타입 (4개) : byte / short / int / long
- 실수 타입 (2개) : float / double
- 논리 타입 (1개) : boolean
- 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입
- 실제 값을 저장
- 참조형
- 기본 타입을 제외한 나머지 (String, 배열 등)
- 참조값(객체의 주소값) 저장
- 변수는 선언된 타입과 동일한 데이터 타입의 데이터만 저장 가능
- 즉, 정수 타입으로 선언된 변수에는 정수 타입의 값만 저장 가능
int score = 95;
double average = 88.5;
char familyName = '김';
String name = "홍길동";
boolean result = true;
데이터 타입과 메모리 사용 크기
- 데이터 타입에 따라 사용하는 메모리 크기가 다름
메모리 크기
- 메모리의 최소 단위 : bit (비트)
- 1 bit에는 0 또는 1 (1개) 저장 가능
- 8개의 bit가 모여서 1 byte 형성
- 8 bit = 1 byte
기본 타입의 크기
- 각 데이터 타입의 크기는 정해져 있음
데이터 타입의 크기의 의미
- 크기에 따라 변수에 저장할 수 있는 값의 범위가 다름
기본 타입의 메모리 크기와 저장되는 값의 범위
자바에서의 문자 표현
- 자바는 모든 문자를 유니코드로 처리
- 유니코드 (Unicode)
- 세계의 모든 문자 표현 가능
- 하나의 문자에 하나의 코드값 부여
- 0 ~ 65535 범위 2 byte 크기의 정수값
- ‘A’ ; ‘\u0041’
char 타입
- 2 byte
- 문자 타입 또는 정수 타입으로 분류
- 문자 값 또는 문자에 해당되는 정수 값 저장 가능
- 주의! : 빈 값(공백) 초기화 할 경우 ‘’하면 오류
- 스페이스를 포함시켜야 함 : ‘ ‘
- ''
: 스페이스 없으면 오류
정수 타입
int 타입
- 4 byte 정수 값을 저장하기 위한 타입
- 정수 연산을 하기 위한 기본 타입
- 일반적으로 정수를 저장할 때 int 타입 사용
long 타입
- 8 byte 정수 값을 저장하기 위한 타입
- 정수 값 뒤에 소문자 l
또는 대문자 L
을 붙여서 사용
- 4 byte 정수가 아니라 8 byte 정수라는 것을 알려 주기 위함
- int 타입의 범위를 넘어서는 큰 정수는 반드시 l
또는 L
을 붙여야 함 (안 붙이면 오류)
실수 타입
- 소수점이 있는 실수값을 저장하기 위한 타입
- float : 4 byte
- double : 8 byte
- float에 비해 double이 약 두 배의 자릿수가 배정되어 있기 때문에 더 정밀한 값 저장 가능
- 정밀도를 요구하는 계산에서는 double 사용
float average = 88.5f;
: float 타입의 리터럴에서 소문자 ``f`` 또는 대문자 ``F`` 붙임
double average = 88.5;
: double 타입이 기본이기 때문에 리터럴에 아무것도 붙이지 않음
- 정수 타입과 같은 크기이지만 저장 방식이 다르기 때문에
- 정수 타입보다 훨씬 큰 범위의 값 저장 가능
- 부동 소수점 방식으로 저장
- 부호비트 + 지수부 + 가수부
논리 타입 (boolean)
- 1 byte로 표현되는 논리값(true/false)을 저장할 수 있는 데이터 타입
- 상태 값에 따라 조건문과 반복문의 실행 흐름을 변경하는데 사용
- 데이터 타입을 다른 타입으로 변환하는 것
byte ←→ int, int ←→ double
타입 변환 종류
- 자동(묵시적) 타입 변환 : Promotion
- 강제(명시적) 타입 변환 : Casting
자동 타입 변환
- 프로그램 실행 도중 자동적으로 타입 변환이 일어나는 것
- 작은 크기의 타입이 큰 크기의 타입에 저장될 때 발생
- 작은 타입이 큰 타입으로 자동 타입 변환
- 바이트 크기가 아닌, 값의 표현 범위에 따라 크기 규정
- 크기가 큰 타입의 값을 크기가 작은 타입의 변수에 저장할 경우 데이터의 손실 발생 - 오류 발생
- 큰 크기의 타입을 작은 크기의 타입으로 강제로 변환하는 것
- 큰 타입을 작은 타입 단위로 쪼개서
- 끝의 해당되는 부분만 작은 타입으로 강제적으로 변환됨
- 주의 ! : 데이터의 일부 손실 발생
- 값의 손실 발생
- 타입 변환 시 값의 손실을 막기 위해 타입의 범위 확인
- 변환할 타입의 최대값 / 최소값을 벗어나는지 검사하고 타입 변환 시도
- Byte.MIN_VALUE / Byte.MAX_VALUE
- 정밀도 손실 발생
- float의 가수 보다 큰 int 값을 float으로 변환할 때 손실 발생
- int 값을 실수로 변환하려면 double 타입 사용
- 문자열(String)은 char 타입으로 강제 타입 변환 불가능
- 연산은 같은 타입의 피연산자(operand)간에만 수행
- int 타입 변수 + int 타입 변수
- 서로 다른 타입의 피연산자 경우
- 두 피연산자 중 크기가 큰 타입으로 자동 변환
- 정수 연산인 경우 : int 타입이 기본 (4 byte)
- 4 byte 보다 작은 타입(byte, char, short)은 int 타입으로 변환된 후 연산 수행