//선언만
자료형 변수명;
//선언과 동시에 할당
자료형 변수명 = 값;
Java에서의 변수선언도 JS와 유사하게 선언하지만, 차이점은 예약어가 Java에서 정해놓은 자료형으로 입력해서 사용한다는 점에서 차이가 있습니다.
💡 변수 선언 후 할당을 안하면?
변수 선언 시 선언과 동시에 값을 할당할 수도 있지만, 선언만 해놓고 값 할당은 나중에 할 수도 있습니다. 이럴 경우 값이 할당되기 전까지 해당 변수의 값은null
상태입니다.
이러한null
의 경우 어떠한 연산을 해도null
이 나오기 때문에 논리적 오류에 주의해야합니다.
위 이미지 처럼 변수 선언 후 할당을 안한채 사용하려하면 에러가 표시됩니다.
필수사항
1. 식별자는 첫 시작은 글자, 달러기호(), 밀줄기호(_)만 사용할 수 있음
3. Java 자체에서 이미 사용중인 키워드는 사용 불가
4. 띄어쓰기불가
권고사항
1. 한글 사용을 지양합니다. 되도록 영어로 작성하도록 합니다.
2. 카멜(camel) 케이스 사용 권장
변수의 생존기간이란, 변수가 만들어진 후 사라지기까지의 기간을 의미합니다.
사용자가 변수를 선언해서 사용 후 JVM에서 일정 기준 이후 메모리에서 삭제 처리 합니다.
이 기준을 변수의 생존기간
이라 합니다. 이러한 기간은 아래의 문제 때문에 생기게 되었습니다.
1. 보안이슈 - 외부에서 해당 변수 접근 문제
2. 메모리 충돌 방지
{
int a = 2; //변수 a 생성시점
{
int b = 3; //변수 b 생성시점
System.out.println(b);
} //변수 b 사라지는 시점
System.out.println(a);
} //변수 a 사라지는 시점
변수의 생존기간은 해당 변수가 만들어진 {}
안에서만 존재한다.
💡 변수의 생존기간
변수의 생존기간은의 기준은 변수의 할당시점이 아니라 변수의 선언시점 부터 시작한다는 점을 주의하자!
자료형의 경우 기본 자료형
과 참조 자료형
두 가지로 구분이 됩니다.
기본 자료형의 경우 스택 영역에 저장이 되며, 참조 자료형은 힙(주소는 스택) 영역에 저장 됩니다.
기본자료형의 경우 변수명을 소문자로 시작, 참조자료형의 경우 변수명을 대문자로 시작하는 방식이 권고됩니다. (필수X)
💡 자바의 메모리 구조
자바의 메모리는 크게 3가지로 나눠집니다.(사실 4개지만....여튼 3개로 주로 구분)
- class, static, final, 메서드 영역
- stack 영역
- heap 영역
Primitive Type
으로 실제 값으로 받은 데이터 자체를 저장하는 자료형입니다.
해당 데이터는 스택 영역에 저장됩니다.
자료형 | 키워드 | 자료의 크기 | 값의 범위 |
---|---|---|---|
부울대수 | boolean | 1byte | true, false |
정수 | byte | 1byte | (-2^7) ~ (2^7)-1 |
short | 2byte | (-2^15) ~ (2^15)-1 | |
int | 4byte | (-2^31) ~ (2^31)-1 | |
long | 8byte | (-2^63) ~ (2^63)-1 | |
실수 | float | 4byte | ±(1.40 x (10^-45) ~ 3.40 x (10^38)) |
double | 8byte | ±(4.94 x (10^-324) ~ 1.79 x (10^308)) | |
문자(정수) | char | 2byte | 유니코드 문자(0 ~ (2^16)-1) |
💡 값의 범위가 어떤 의미인지 확인하기
byte 자료형을 예시로 보면 -128 ~ 127까지를 표현할 수 있는 자료형이다. 그런데 이런 자료형에 해당 값을 초과하는 숫자를 넣게 되면 어떻게 될까?byte test = (byte) 566; byte test1 = (byte) 128; System.out.println(test); //54 출력됨 System.out.println(test1); //-128이 출력됨
위 예시 처럼 넣은 값과 영 다른 엉뚱한 값이 나오는 것 처럼 보인다. 하지만 사실상 -128 ~ 127까지의 값 범위에서 127을 초과하면 다시 가장 낮은 값으로 돌아와서 -128이 표시되는 방식 입니다.
참(true), 거짓(false) 값만 저장하는 자료형 입니다.
이 자료형의 경우 1bit를 사용하지만 Java의 자료처리 최소 단위가 1byte이기 때문에 1byte가 할당 됩니다.
💡 자바에서의 정수값 표현
- 10진수 : 숫자
- 2진수 : 0b + 숫자
- 8진수 : 0 + 숫자
- 16진수 : 0x + 숫자
💡 문자 저장/출력 방식
- 문자의 저장 방식
: 문자 값 또는 정수가 입력되었을 경우 문자로 입력된 경우 최종적으로 유니코드 표에 따른 정수값으로 메모리에 저장됩니다.
\u
로 시작하는 유니코드 정수 자체로 저장할 수도 있습니다.- 문자의 출력 방식
: 메모리에 할당되어있는 정수값을 유니코드 표에 따른 문자로 출력합니다.
Java에서 기본 자료형의 경우 =
을 기준으로 선언한 자료 타입과 갑의 자료 타입을 맞춰서 입력해줘야합니다. 기본적으로 입력된 값이 해당 자료형 내에 포함될 경우 자동 형변환으로 자동으로 맞춰지지만, 입력된 값이 해당 자료형의 크기보다 클 경우 수동으로 형변환을 해줘야합니다.
boolean을 제외한 기본 자료형 7개는 자료형 끼리 서로 변환할 수 있습니다.
💡 자료의 크기 순서
boolean
<byte
<short
<char
<int
<long
<float
<double
여기서 자료형의 크기는 자료형의 바이트 순이 아니라 저장하는 값의 범위 기준입니다.
이러한 자료형 변환을 Type Casting
이라고 하며 2가지 방법으로 할 수 있습니다.
- 캐스팅 방법 1 : (자료형) 표기
//사용법
자료형 변수명 = (자료형) 값;
//사용예시
byte test;
test = (byte)560;
- 캐스팅 방법 2 : 실수리터럴 단위문자 표기
//사용법
long 변수명 = 값L;
float 변수명 = 값F;
//사용예시
long test;
test = 16L;
실수의 경우 해당 단위문자를 이용할 수 있는데, L = long / F = float 으로 값 뒤에 표기합니다.
사실 L, F는 l, f로도 쓸수 있지만 되도록 대문자 L, F로 쓰는걸 권장합니다.
💡 명시적 형변환
Java의 경우 자동 형변환이 이뤄지기는 하지만, 코드를 짤 때 가능한 명시적으로 형변환하는 방식으로 작성하는 것을 권장합니다.
자료형 간의 연산을 할 경우 CPU에서 연산 최소 단위가 int
이므로 int
보다 작은 단위의 자료형 끼리의 연산에서도 결과는 int
형으로 나오게 됩니다.
또한, 다른 자료형 끼리의 연산의 경우 더 큰 자료형으로 자동형변환하여 연산된다는 점도 참고해야합니다.
기본 자료형, 참조 자료형 모두 선언 후 할당을 안 한 상태에서 출력하려하면 스택 메모리에 할당된 값이 없기 때문에 오류가 발생합니다.
따라서 각 자료형에 맞는 초기값을 설정해줘야할 경우 아래 초기값으로 설정합니다.
boolean
: false정수형
: 0실수형
: 0.0Do it! 진짜 개발자가 되는 Java 프로그램 입분서 자바 완전 정복 - 김동형
위 책을 공부하며 작성하고 있습니다!