🌈 목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
🌈 학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
✔️ Primitive Type & Reference Type

Primitive Type (기본 자료형) - 총 8 개
-
정수형 : byte, short, int long, char
-
소수형 : float , double
-
boolean
| 구분 | 기본 자료형 | 메모리 크기 | 기본 값 | 표현 범위 |
| 논리형 | boolean | 1 byte | false | true, false |
| 정수형 | byte | 1 byte | 0 | -128 ~ 127 |
| short | 2 byte | 0 | -32,768 ~ 32767 | |
| int | 4 byte | 0 | -2^{31} ~ 2^{31}-1 | |
| long | 8 byte | 0L | -2^{63} ~ 2^{63}-1 | |
| 실수형 | float | 4 byte | 0.0F |
single-precision 32-bit |
| double | 8 byte | 0.0 |
double-precision 64-bit |
|
| 문자형 | char | 2 byte (unicode) | '\u000' |
'\u0000' ~ '\uffff' |
- Byte ( = 8bit) 의 구조

Reference Type (참조 자료형)
- class, interface, enum, array, String type
- 종류는 무한하다.
- 실제 값이 지정되어 있는 곳의 위치를 주소 값
- JVM runtime data area 중 가비지 컬렉터 heap 영역에 할당되는데, 참조 변수는 heap 영역에 할당된 주소값 저장 (실제 값이 아니다)
✔️ 리터럴
: 실제로 저장되는 값 그 자체로 메모리에 저장되어 변하지 않는 고정된 값
- 컴파일 타임에 프로그램 안에 정의되어 있는 그 자체로 해석되는 값
constant value (상수) : 변하지 않는 변수
- 변수의 종류 :
- local variable (지역변수)
- parameter (매개변수)
- instance variable (인스턴스) - static X
- class variable - static
✔️ 변수 선언 및 초기화하는 방법
public class Variable_init{
public static void main(String[] args){
// 정수형 변수 선언
int value;
// 여러개 한번에 선언
int value1, value2,value3;
// 선언과 동시에 초기화
int value4 = 10;
// 선언 다음 초기화
int value5;
value5 = 10;
}
}
- Declaration : 변수 선언/ 저장공간을 확보
- Initialization : 변수 초기화 / 저장공간에 원하는 값을 저장
✔️ 변수의 스코프와 라이프타임
Variable Scope ?
- 해당 변수를 사용할수 있는 영역 범위
Lifetime
- 해당 변수가 메모리에 언제까지 살아있는지 의미
| 변수 | 특징 | scope | lifetime |
| local variable | instance, class가 아닌 모든 변수 중괄호 안에 선언된 변수 |
변수 선언 block 내부 (메서드) | 지역변수를 선언한 중괄호 내에서만 유효 |
| instance variable | 클래스 안 선언, 어떤 메서드나 블락 안에 선언되지 않으며 static X | static method 제외 클래스 전체 | 객체가 생성될때 생명, 객체를 참조하고 있는 다른 객체가 없으면 소멸 / 인스턴스화한 객체가 메모리에서 사라질 때 까지 |
| class variable | 클래스 안 선언, 어떤 메서드나 블락 안에 선언되지 않은 static 선언 변수 | 클래스 전체 | 클래스 처음 호출시 생명, 프로그램 종료 시 소멸 |
public class Scope{
static final int DAYS_IN_WEEK = 7; // constant variable
int instanceVariable;
static int classVariable;
public static void main(String[] args){
int localVariable;
}
}
✔️ 타입 변환 - 캐스팅 & 타입 프로모션
Type Casting
: 크기가 더 큰 자료형을 크기가 더 작은 자료형에 대입하는 것 의미
- 데이터 크기가 더 크기 때문에 변환과정에서 데이터 손실이나 변형 올 수있다.
Type Promotion
: 타입 캐스팅 반대로 크기가 더 작은 자료형을 더 큰 자료형에 대입하는것
- 데이터 손실이나, 변형이 오지 않으며 자동으로 변환 가능
- 자동으로 byte, short, char 연산을 int 로 변환
public class CastingType{
public static void main(String[] args){
CastingType operator = new CastingType();
operator.casting();
}
public void casting() {
byte byteVal = 127;
// Type Promotion : byte -> short
short shortVal = byteVal;
shortVal++;
System.out.println(shortVal); //128
// Type Casting : short -> byte
byteVal = (byte)shortVal;
System.out.println(byteVal); //-128
}
}

✔️ 1차 및 2차 배열 선언하기
Array?
배열이란 동일한 타입의 데이터를 연속된 공간에 저장하기 위한 자료구조
- 1 차 배열
int[] numArray = new int[5];
int[] numArray = {1,3,8,23,99};

- 2차 배열
// 선언 : new int[세로][가로]
int[][] a = new int[3][4];

** 쓰이는 경우 :
- dynamic programming
- 그래프 > 인접 행렬
✔️ 타입 추론, var
Type Inference
: 값을 보고 컴파일러가 데이터 타입이 무엇인지 추론한다.
- int, long, boolean, char 등의 데이터 타입을 명시하지 않고 사용
- Generic 에서 타입 추론 사용
public class Generic{
public static void main(String[] agrs){
HashMap<Integer, Integer> hp = new HashMap<>();
}
}
: 객체를 할당할때 HashMap<Integer, Integer> 을 사용하지 않아도 변수에 담길 데이터 타입을 추론해 낼수 있다.
- Java 10 부터 var 구문 사용
var list = {1,2,3,4,5};
for(var index : list) {
System.out.println(list[index]);
}
: var 키워드를 이용한다고 해도 Java 는 여전히 정적 언어이며 지역 변수 타입을 추론하기에 충분한 정보가 없다면 컴파일 오류가 발생 할수 있다.
'🌈 Java > Back to Basic 101' 카테고리의 다른 글
| 자바 기초 정리: @Overloading vs. @Overriding (0) | 2021.03.03 |
|---|---|
| 자바 기초 정리: ArrayList vs. LinkedList (0) | 2021.03.03 |
| 자바 기초 정리: IF vs. Switch (0) | 2021.03.03 |
| 자바 기초 정리: Class, Data Types (0) | 2021.03.03 |
| 1주차 : JVM 과 자바 실행 (0) | 2021.02.25 |