자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
2. 프리미티브 타입과 레퍼런스 타입
3. 리터럴
4. 변수 선언 및 초기화하는 방법
5. 변수의 스코프와 라이프타임
6. 타입 변환, 캐스팅 그리고 타입 프로모션
7. 1차 및 2차 배열 선언하기
8. 타입 추론, var
총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
기본값이 있기 때문에 Null이 존재하지 않는다. 만약 기본형 타입에 Null을 넣고 싶다면 래퍼 클래스를 활용한다.
실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다.
만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다.
주로 문법상의 에러가 많다. 예를 들어 ;을 안붙였다는 이유로 빨간 줄이 쳐지는 경우
Type | Contains | Default | Size | Range |
---|---|---|---|---|
boolean | true or false | false | 1 bit | NA |
char | Unicode character | \u0000 | 16 bits | \u0000 to \uFFFF |
byte | Signed integer | 0 | 8 bits | –128 to 127 |
short | Signed integer | 0 | 16 bits | –32768 to 32767 |
int | Signed integer | 0 | 32 bits | –2147483648 to 2147483647 약 21억 |
long | Signed integer | 0 | 64 bits | –9223372036854775808 to 9223372036854775807 |
float | IEEE 754 floating point | 0.0 | 32 bits | 1.4E–45 to 3.4028235E+38 |
double | IEEE 754 floating point | 0.0 | 64 bits | 4.9E–324 to 1.7976931348623157E+308 |
출저 : https://velog.io/@youngerjesus
위에서 정리를 하였습니다.
- 기본형 타입을 제외한 타입들이 모두 참조형 타입(Reference type)이다.
- 빈 객체를 의미하는 Null이 존재한다.
- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.
- 문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다. 예를 들어 객체나 배열을 Null 값으로 받으면 NullPointException이 발생하므로 변수값을 넣어야 한다.
변수 초기화
변수를 선언하고 처음으로 값을 저장하는 것을 변수 초기화 라고 한다. 변수의 초기화는 경우에 따라 필수적일수도 선택적일수도 있지만 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직하다. 멤버변수는 초기화를 하지 않아도 변수의 타입에 맞는 기본값으로 초기화가 이루어지지만 지역변수는 사용하기 전에 반드시 초기화가 이루어져야 한다.
출저 : https://doublesprogramming.tistory.com/73
- 각 타입의 기본값(default value)
멤버변수는 초기화를 하지 않아도 변수의 타입에 맞는 기본값으로 초기화가 된다.
출저 : https://doublesprogramming.tistory.com/73
변수에 접근하거나 접근할 수 있는 유효 범위/영역
개발자는 자신이 선언한 또는 선언된 변수에 접근할 수 있는 영역에 대해서 이해해야한다.
일반적인 규칙은 변수가 선언된 블록내에서만 액세스 할 수 있다는 것이다.
블록은 왼쪽 중괄호 {로 시작하고 오른쪽 줄괄호 }로 끝난다.
변수가 메모리에서 살아있는 기간
정의
클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
scope
정적 메서드를 제외한 클래스 전체
라이프타임
객체가 메모리에 남아있을 때까지.
예시
x와 y의 scope
public class AddTest {
/* 인스턴스 변수 범위 */
int x,y;
static int result;
void add(int a, int b){
x = a;
y = b;
int sum = x + y; //Sum
System.out.println("Sum = "+sum);
}
/* 인스턴스 변수 범위 */
public static void main(String[] args) {
AddTest obj = new AddTest();
obj.add(10,20);
}
}
정의
클래스 내부, 모든 블록 외부에서 선언되고 static으로 표시된 변수
scope
클래스 전체
라이프타임
프로그램이 끝날때까지 또는 클래스가 메모리에 로드 되는 동안
예시
result(class variable)의 scope
public class AddTest {
/* 클래스 변수 범위 */
int x,y;
static int result;
void add(int a, int b){
x = a;
y = b;
int sum = x + y; //Sum
System.out.println("Sum = "+sum);
}
public static void main(String[] args) {
AddTest obj = new AddTest();
obj.add(10,20);
}
/* 클래스 변수 범위*/
}
정의
인스턴스 및 클래스 변수가 아닌 모든 변수
scope
선언된 블록 내에 있음
라이프타임
컨트롤이 선언 된 블록을 떠날때까지
예시
a, b (local variable)의 scope
public class AddTest {
int x,y;
static int result;
void add(int a, int b){ //a와 b는 로컬변수
x = a;
y = b;
int sum = x + y; //Sum
System.out.println("Sum = "+sum);
}
public static void main(String[] args) {
AddTest obj = new AddTest();
obj.add(10,20);
}
}
변수 또는 상수의 타입을 다른 타입으로 변환
연산을 수행하는 코드에서는 같은 타입끼리만 가능하다. 그래서 연산을 수행하기 전에 같은 타입으로 만들어야 하는데
타입 변환을 하는 것을 형변환 이라고 한다.
- 프로모션 (자동/묵시적 형변환) : 작은 데이터 타입에서 큰 데이터 타입으로 형 변환
- 캐스팅(명시적 형 변환) : 큰 데이터 타입에서 작은 데이터 타입으로 형 변환
동일 타입의 값을 여러개 취급할 수 있는 기능
인덱스라고 불리는 []로 감싼 0 부터 시작하는 정수를 사용하여 배열의 길이나 순서를 나타낼 수 있다.
배열도 결국은 타입에 따라 default value로 채워진다.
참조의 경우 null
int / short / byte / long의 경우 0
float / double 의 경우 0.0
bool의 경우 false
char의 경우 \u0000
int array = new int[10];
int array = new int[10][10];
var
자바 10부터 타입 추론을 지원하는 var키워드가 추가되었다.
이 키워드는 local variable이면서 선언과 동시에 initializer가 필수적으로 요구된다.
예시
// java 9 이하 String message = "data"; // java 10 이상 var message = "the initializer present on the right-hand side";
https://velog.io/@youngerjesus 프리미티브 타입 표
https://gbsb.tistory.com/6 프리미티브 및 레퍼런스 정의
https://doublesprogramming.tistory.com/73 변수 초기화
https://league-cat.tistory.com/411 변수의 스코프와 라이프타임
https://league-cat.tistory.com/413 1차 및 2차 배열 선언하기
https://velog.io/@bk_log 타입 추론, var