Primitive type : 기본형 타입
Wrapper Class (래퍼 클래스)
Primitive type을 객체로 다루기 위해서 사용하는 클래스
불변성을 가지는 것이 특징이다.
| 자료형 | 키워드 | 크기 | 기본값 | 표현 범위 |
|---|---|---|---|---|
| 논리형 | boolean | 1byte | false | true 또는 false (0과 1이 아니다) |
| 문자형 | char | 2byte | \u0000 | 0 ~ 65,535 |
| 정수형 | byte | 1byte | 0 | -128 ~ 127 |
| short | 2byte | 0 | 7 | |
| int | 4byte | 0 | -2,147,483,648 ~ 2,147,483,64 | |
| long | 8byte | 0 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
| 실수형 | float | 4byte | 0.0 | -3,4E38 ~ +3.4E8 |
| double | 8byte | 0.0 | -1.7E308 ~ +1.7E308 |
long l = 2147483648L;
float f = 1234.567F;
Reference type은 참조형 타입으로 Primitive type을 제외한 타입을 말한다.
클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입이 있다.
데이터(값) 그 자체를 뜻한다.
int i = 10;
이 때 i 는 변수, 10이 리터럴이다.
변수를 선언함과 동시에 그 값을 지정해주는 표기법을 말하며 코드상에서 데이터를 표현하는 방식이다.
Java에서 상수는 constant로 변하지 않는 변수를 뜻한다. 하지만 위의 코드에서 10은 변수에 넣는 데이터로 초기화를 통해 변경이 되기에 리터럴이라고 하는 것이다.
const a = 1;
여기서 a가 상수이고 1이 리터럴이 되는 것이다.
변수를 사용하기 위해 필요한 선언과정이다.
int i;
변수를 사용하기 전 처음으로 값을 저장하는 것
i = 2000;
int i = 2000;
변수의 스코프 : 변수를 사용할 수 있는 영역
라이프 타임 : 변수가 값을 담고 있을 수 있는 주기
| 변수의 종류 | 선언 위치 | 스코프 | 라이프사이클 |
|---|---|---|---|
| 클래스 변수 | 클래스 영역 | 클래스 전체 | 클래스가 메모리에 올라간 후 프로그램이 끝날 때까지 |
| 인스턴스 변수 | 클래스 영역 | static 블록과 static 메서드를 제외한 클래스 전체 | 인스턴스가 생성된 후 메모리에 살아있을 때까지 |
| 로컬 변수 | 메소드, 생성자, 초기화 블록 내부 | 변수가 선언된 블록 내부 | 변수가 선언된 후 블록을 벗어날 때까지 |
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
double a_score = 98.45;
int b_score = 98;
int sum = (int)a_score + b_score;
묵시적 형변환으로 작은 데이터 타입에서 큰 데이터 타입으로 형 변환이 되는 것이다.
int a = 10;
float b = a; // b = 10.0
위의 코드처럼 (float) a 로 명시적인 형 변환을 해주지 않아도 큰 데이터 타입에는 작은 데이터 타입의 모든 값을 넣을 수 있기 때문에 자동으로 형변환이 되는 것이다.
명시적 형변환으로 주로 큰 데이터 타입에서 작은 데이터 타입으로 형 변환을 할 때 사용한다.
float a = 10;
int b = a; //error
int b = (int)a;
큰 데이터 타입의 값을 작은 데이터 타입에 억지로 넣는다고 생각하면 된다. 값의 손실이나 변형이 생길 수 있기 때문에 자동으로 되지않고 작성자가 명시적으로 입력을 해주어야 가능하다.
1차원 배열과 2차원 배열의 차이는 대괄호( [] )의 갯수 차이이다. 이는 메모리가 허용하는 한도까지 차원을 높일 수 있다.
int[] oneDimensionalArray = new int[5]{1, 2, 3, 4, 5};
int[][] twoDimensionalArray = new int[2][2]{{1,2}, {3,4}};
다음 코드들은 각각 1차원, 2차원 배열을 선언, 생성, 초기화를 모두 시켜준 경우이다.
2차원 배열의 경우, new int[행][열]로 이해하면 된다.
int[] array; //선언
array = new int[5] //생성
array = {1, 2, 3, 4, 5}; //초기화
이는 선언과 생성, 초기화를 따로 해준 것으로 array라는 배열을 선언하고 이 배열을 길이를 5로 하여 생성한다. 그 후 변수의 이름으로 배열의 값을 저장해주는 것이다.
int[] array = {1, 2, 3, 4, 5}; //가능
int[] array2;
array = {1, 2, 3, 4, 5}; //error
다음 경우를 보자. array는 선언과 초기화를 같이 해주었다. 이 경우는 따로 길이를 설정하여 생성하지 않아도 생성과 초기화가 동시에 가능하다. 하지만 array2의 경우는 선언 후 array에 값을 저장할 때 new int[] 를 생략할 수 없다.
Q1. Wrapper Class는 어떤 경우에 사용하는 것인가?
본 스터디는 2020 백기선님의 자바스터디의 커리큘럼을 참고하여 진행하고 있습니다.