기본은 아무리 강조해도 부족하지 않다.
종류 | 데이터형 | 크기(byte / bit) | 기본값 | 표현 범위 |
---|---|---|---|---|
논리형 | boolean | 1 / 8 | false | true 또는 false |
문자형 | char | 2 / 16 | \u0000 | '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터) |
정수형 | byte | 1 / 8 | 0 | -128 ~ 127 |
정수형 | short | 2 / 16 | 0 | -32768 ~ 32767 |
정수형 | int | 4 / 32 | 0 | -2147483648 ~ 2147483647( -21억 ~ + 21억) |
정수형 | long | 8 / 64 | 0L | -9223372036854775808 ~ 9223372036854775807(-100경 ~ + 100경) |
실수형 | float | 4 / 32 | 0.0F | 1.4E-45 ~ 3.4028235E38 |
실수형 | double | 8 / 64 | 0.0 | 4.9E-324 ~ 1.7976931348623157E308 |
기본형 타입은 총 8가지로 정의되어 있다.
각 타입별로 기본값이 존재하기 때문에, Null은 존재하지 않는다.
만약 기본형 타입을 객체로 만들어 Null을 기본값으로 설정하고 싶다면, 래퍼 클래스를 사용한다.
기본형 타입은 실제 값이 스택(Stack) 메모리에 저장된다.
컴파일 시점에 타입의 표현 범위를 넘어나는 값이 존재하면 컴파일 에러가 발생한다.
데이터형 | 크기(byte / bit) | 기본값 |
---|---|---|
배열(Array) | 4 byte (객체의 주소값) | null |
열거(Enumeration) | 4 byte (객체의 주소값) | null |
클래스(Class) | 4 byte (객체의 주소값) | null |
인터페이스(Interface) | 4 byte (객체의 주소값) | null |
기본형 타입을 제외한 모든 타입을 참조형 타입이라고 한다.
기본형 타입과 다르게 Null을 허용하며, 기본값으로 설정된다.
참조형 타입은 값이 힙(Heep) 메모리에 저장된다.
최상위 객체인 Object를 상속받으면 참조형이 된다.
java.lang.Object
참조형 타입으로 선언한 객체가 Null일 경우 문법에는 문제 없지만,
객체를 사용할경우 NullPointException(NPE)가 발생한다.
소스코드 내 직접 입력된 값(데이터)을 의미한다.
(변수 초기화 시 '저장할 값'도 해당된다.)
자바에서 변수를 선언하기 위해서는 type(타입)을 지정하고 리터럴에 맞게 초기화를 해주어야 한다.
타입 변수명 = 초기화 할 값
int Age = 24;
double Height = 174.8;
char bloodType = 'A';
String name = "chori";
public class Test {
int var1; //전역 변수, 인스턴스 변수, 필드
static int var2; //클래스 변수, 정적 변수
void testMe(int var3) { //매개 변수, 파라미터
int var4 = 0; //지역(로컬)변수
}
}
변수를 사용 할 수 있는 범위(영역)를 뜻하며,
변수를 선언했을 때 선언한 코드 블럭{ } 내에서 사용하는 것을 의미한다.
위 코드에서 Test 클래스에 선언된 전역 변수들은
클래스가 종료될 때까지 사용된다.
변수가 메모리에서 살아있는 기간을 의미한다.
스코프와 다른 점은 코드 블럭에 따른 생명주기가 아닌,
객체의 참조여부에 따라 생명주기가 결정 될 수 있다는 점이다.
위 코드에서 var1 변수는 인스턴스 변수로, 메서드 내에서 인스턴스화하여 사용할 수 있는 변수다.
이후 인스턴스 객체의 사용이 끝나고 참조가 없어지면, 가비지컬랙터(GC)가 메모리에서 삭제한다.
큰 데이터에서 작은 데이터 타입으로 형변환 하는 것.
강제 형변환이라고도 하며, 작은 크기 타입 변수에 (작은 크기 타입)큰 크기 타입을 대입하여 형변환 한다.
double dNum = 123.12;
int num = (int)dNum;
강제 타입 변환을 할 때엔 값의 손실이 발생할 수 있으므로 주의해야 한다.
작은 데이터 타입에서 큰 데이터 타입으로 형변화 하는 것.
int num = 100;
long lNum = num;
byte, int 등의 타입은 char 타입으로 자동 형변환 할 수 없다.
1) int[] num = new int[5]; //5개의 값을 저장 할 수 있는 배열 선언.
2) int[] num = {1,2,3,4,5};
1) int[] num = new int[2][3]; //3개 크기의 배열을 2개 가질 수 있는 배열 선언.
2) int[] num = {{1,2,3},{4,5,6}};
java 10 버전 부터 타입 추론과 var를 사용할 수 있게 되었다.
개발자가 명시적으로 변수의 타입을 지정하지 않아도,
컴파일러가 자동으로 변수의 타입을 리터럴 값으로 추론하는 것이다.
일반적으로 자바스크립트 등의 함수형 언어에서 지원하던 기능을 java 10버전 부터 사용이 가능하다.
컴파일 시점에 var를 초기화된 값으로 보고 추론에서 바이트코드에 명시적으로 형을 선언한다.
즉 int 리터럴 값은 int로 명시하기 때문에 타입추론 변수를 읽을 때마다
타입을 알아내기 위한 연산을 하지 않는다는 것. 그로 인해 연산기능이 높아질 수 있다.
해당 포스트는 백기선 라이브 스터디 2주차를 참고하여 학습한 내용입니다.
잘읽었습니다