변수
메모리(RAM)에 값(Data)을 기록하기 위한 공간
가독성이 좋아진다.
재사용성 증가로 인한 코드량 감소, 유지 보수가 용이하다.
프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록되어야 한다.
메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것
자료형(변수 타입 지정) + 변수명(변수명 지정) + ;(마침)
자료형 | 변수명 | byte | bit | 표기 |
---|---|---|---|---|
논리형 변수 선언 | boolean isTrue; | 1byte | 8bit | |
문자형 변수 선언 | char ch; | 2byte | 16bit | |
문자열 변수 선언 | String str; | 참조형 | ||
정수형 변수 선언 | byte bnum; | 1byte | 8bit | |
short snum; | 2byte | 16bit | ||
int inum; | 4byte(정수 기본 자료형) | 32bit | ||
long lnum; | 8byte | 64bit | 0L | |
실수형 변수 선언 | float fnum; | 4byte | 32bit | 0.0f |
double dnum; | 8byte(실수 기본 자료형) | 64bit | 0.0 또는 0.0d |
저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준이 필요하다.
-컴퓨터가 나타내는 데이터의 저장 최소 단위, 2진수 값 하나를 저장할 수 있는 메모리 공간을 의미한다.
-데이터 처리 또는 문자의 최소 단위. 8개의 비트가 모여 하나의 바이트를 구성한다.
->컴퓨터는 2진수로 인지하기 때문에 2ⁿ(n=비트 크기)로 범위를 할당한다.
대소문자가 구분되며 길이 제한이 없다.
예약어를 사용할 수 없다.
숫자로 시작할 수 없다. ex) age1(o) / 1age(x)
특수문자는 '_'와 '$'만을 허용한다.
여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
단, 첫 시작 글자는 소문자로 하는 것이 관례이다. ex) userName
값 대입과 리터럴
값 대입
생성한 변수(저장 공간)에 값을 대입하는 것
ex)int age;
age = 10;
age = 20;
변수는 한 개의 데이터만 보관!! 마지막에 대입한 값은 보관한다.
-> 20을 마지막에 대입했으니 10은 지워진다.
변수에 대입되는 값 자체
ex) long l = 10000L;
변수를 사용하기 전에 처음으로 값을 저장하는 것
-> 지역변수는 반드시 초기화.
ex)int age; 또는 int age = 100;
age = 100;
(선언 후 초기화) (선언과 동시에 초기화)
출력메서드
() 안의 변수, 문자, 숫자, 논리 값은 모니터에 출력해 주는 메서드
ex) System.out.print("안녕하세요");
print 문과 동일하게 출력은 해주지만 출력 후 자동으로 출력 창에 줄 바꿈을 해주는 메서드
ex) System.out.println("안녕하세요");
정해져 있는 형식에 맞춰서 그 형식에 맞는 값(변수)을 줄 바꿈 하지 않고 출력
%d :정수형, %o :8진수, %x :16진수
%c :문자, %s :문자열
%f :실수(소수점 아래 6자리), %e :지수 형태 표현, %g :대입 값 그대로
%A :16진수 실수
%b :논리형
*정렬방법
-%nd : n 칸을 확보하고 오른쪽 정렬
-%-nd : n 칸을 확보하고 왼쪽 정렬
-%.nf : 소수점 아래 n 자리까지만 표시
상수
수학에서는 변하지 않는 값을 의미한다.
컴퓨터(JAVA)에서는 한 번만 저장(기록) 할 수 있는 메모리를 의미한다.
final int AGE;
*상수명은 일반적으로 대문자로 표기
1) 선언과 동시에 초기화
final int NUM = 100;
2) 선언 후 초기화
final int NUM;
NUM = 100;
*초기화 이후 다른 데이터(값)를 대입할 수 없다.
127+1을 하면 범위를 초과한 128이 되고 허용된 범위 이상의 비트를 침범하게 되는 현상이다.
1byte : -128~127
127 + 1 = -128
ex) 전자시계를 예로 들었을 때, 23:59:59(127, 전자시계가 표현할 수 있는 가장 큰 범위)에
1초를 더하면 00:00:00(-128, 가장 작은 값)으로 바뀌는 것과 같은 원리
부호 비트를 제외한 모든 자리를 1로 채워 넣으면 byte 자리에서 bit로 표현할 수 있는 최댓값.
10진수로는 127.
*가장 앞자리는 부호 비트의 용도. 0이면 양수, 1이면 음수
byte형 허용범의 최솟값. -128.
형 변환
값(Date)의 자료형을 바꾸는 것 (boolean 제외)
같은 종류 자료형만 대입 가능하다.
같은 종류 자료형만 계산 가능하다.
계산의 결과도 같은 종류의 값이 나와야 한다.
ex) int형 변수에는 int 값만 대입할 수 있고, int형 변수끼리만 계산 가능,
그 결과 역시 int형이 나와야 한다.
*원칙이 지켜지지 않은 경우(ex) 프로그램에서 정숫값과 실숫값을 더하는 연산이 필요한 경우)에 형 변환이 필요하다.
123456789 -> 123456789.0
(int) (double)
'A' -> 65
(char) (int)
3.14f -> 3
(float) (int)
*형 변환하고자 하는 값과 자료형의 표현 범위 차이에 따라 형 변환 방법이 나뉜다.(자동 형 변환, 강제 형 변환)
컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환
어떻게 정수형 long(8byte)에서 실수형 float(4byte)로 변환이 가능할까?
정수와 실수의 저장방법에 차이가 있기 때문에 가능하다.
float가 bit 수는 적지만, long보다 표현 가능한 수의 범위가 더 넓다.
문자형 char가 어떻게 정수형 int로 변환이 가능할까?
컴퓨터는 각각의 문자에 해당하는 숫자를 두어서 처리한다.
ex) A는 65의 숫자로 처리*short는 음수~양수, char의 경우는 양수
ex) int a = 12;
double d = 3.3;
double result = a+d;
a+d -> 12+3.3 -> 12.0+3.3 -> 15.3
(a가 double로 자동 형 변환되어 15.3이라는 결과가 나온다.)
*단, byte와 short 자료형 값의 계산 결과는 무조건 int로 처리한다.
값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환
강제 형 변환 시 데이터 손실이 발생할 수 있다. -> 데이터의 변형, 손실을 감수하고 강제 변환하는 것임!
ex) double temp;
int name = (int) temp;
-> 8byte인 double형 변수 temp를 4byte인 int형 변수 name에 담고자 할 때는
() 안에 변환하고자 하는 자료형인 int를 명시해 주어야 한다.
ex) int num = 290;
byte num2 = (byte) num;
int(4byte, 32bit) 공간에 290이라는 수가 bit로 표현이 되어 있지만,
이를 byte로 강제 형 변환하면 8bit 공간 밖에 남지 않기 때문에 앞의 자료는 손실,
34라는 전혀 다른 숫자가 되어 버린다.