티스토리 뷰
1. Primitive Type 종류, 값의 범위, 기본 값
2. Primitive Type 과 Reference Type
primitive type (원시 타입)
정수, 실수, 문자, 논리 리터럴 과 같은 실제 데이터 값을 저장하는 타입이다. non-object
Reference Type (참조 타입)
메모리 번지 값을 통해 객체를 참조하는 타입이다. 객체(obejct)의 주소를 저장한다. 예를 들면 class, interface, enum, array, String type을 말한다.
3. literal이란?
리터럴은 프로그램에서 직접 표현한 값(데이터)을 말한다.
1) 정수 리터럴
10진수, 8진수, 16진수, 2진수 리터럴
정수 리터럴은 int형으로 컴파일, long 형은 숫자뒤에 L이나 l을 붙여 표시
- 10진수 : 소수점이 없는 정수 리터럴 ex) 12, -200, 0
- 8진수 : 0으로 시작하는 리터럴 ex) 02, -09, 053
- 16진수 : 0x 또는 0X으로 시작 ex) 0x3, 0xA, 0XB5, 0XAC32
- 2진수 : 0b로 시작 ex) 0b0101
2) 실수 리터럴
소수점 형태나 지수 형태
실수 리터럴은 double형으로 컴파일, float형은 숫자뒤에 F나 f를 붙여 표시
- 10진수 실수 : 소수점이 있는 리터럴 ex) 0.34, -2.9312
- 10진수 지수와 가수 : E 또는 e가 숫자 뒤에 있는 리터럴 ex) 6E8 → 6 * 10^{8}
3) 문자 리터럴
- 단일 인용부호 '' 로 표현한 문자 ex) 'N', '아'
- 이스케이프 문자 : 역슬래쉬가 붙은 문자 리터럴로 특수한 용도로 사용
- \b : 백스페이스
- \t : 탭
- \n : 줄바꿈
- \f : form feed
- \r : 캐리지 리턴
- " : 쌍따옴표
- ' : 따옴표
- \ : 역슬래시
- \u16진수 : 16진수에 해당하는 유니코드
4) 논리 리터럴
- true(참), false(거짓) 표현시 사용하는 논리 데이터 (boolean형)
4. 변수 선언 및 초기화 방법
변수 선언은 저장공간을 확보한다는 의미이다. 방법은 타입과 변수이름 순으로 선언한다.
타입의 크기 만큼 공간을 확보한 후에 그 공간의 이름을 변수이름으로 짓는 것과 같은 의미이다.
//primitive type
int var1;
double var2, var3, var4; //여러개 동시에 선언 가능
//reference type
A a = new A(); //클래스 객체
변수 이름을 짓는것은 자유지만 지켜야하는 규칙이 있다.
- 첫번째 글자는 문자이거나 '$', '_' 이어야하고 숫자로 시작할 수 없다.
- 영어 대소문자는 구분된다.
- 길이의 제한이 없다.
- 예약어를 사용할 수 없다.
변수의 선언과 동시에 초기화를 할 수도 있고, 나중에 초기화를 할 수도 있다.
변수는 선언과 동시에 쓰레기 값이 들어가므로, 나중에라도 초기화를 해주어야한다.
int var1 = 4;
int var2;
var2 = 6;
5. 변수의 스코프와 라이프타임
변수의 스코프란, 해당 변수를 사용할 수 있는 영역 범위를 말한다.
변수의 라이프타임이란, 해당 변수가 메모리에 살아있는 시간을 말한다.
public class tempClass {
int n1, n2; //Instance Variables
static int n3; //Class Variables
void print(){
System.out.println("n1 : " + n1 + ", n2 : " + n2);
}
}
Instance Variables
클래스 안에서 선언되어 있지만, 메서드나 블록 안에서 선언되지는 않은 변수를 말한다. 스코프는 static 메서드를 제외한 클래스 전체다. 라이프타임은 클래스를 인스턴스화한 객체가 메모리에서 사라질 때까지다.
Class Variables
클래스 안에서 선언되어 있지만, 메서드나 블록안에서 선언되지 않았으며 static 키워드가 포함되어 선언된 변수를 말한다. 스코프는 클래스 전체다. 라이프타임은 프로그램 종료할 때 까지이다.
Local Variables
인스턴스 변수, 클래스 변수가 아닌 모든 변수다. 스코프는 변수가 선언된 블록 내부이고 라이프타임은 변수가 선언된 블록 내부에 있는동안이다.
6. 타입 변환(Type casting, Type Promotion)
타입 변환(casting)은 어떤 변수의 자료형을 다른 형으로 변환하는 것을 말한다.
형 변환은 두가지로 나눌수 있는데, 타입 캐스팅과 타입 프로모션이다.
Type casting 이란, 크기가 더 큰 자료형을 더 작은 자료형에 대입하는 것을 의미한다. 예를 들어서 int (4byte) 형의 데이터를 byte(1byte) 형에 대입할 때 발생한다고 볼 수 있다. 큰 데이터가 작은 곳으로 들어가기 때문에 데이터의 손실이나 변형이 올수도 있다. 이 때는 명시적으로 형변환을 해주어야 한다.
int n1 = 20;
byte b1 = (byte)n1; //타입 캐스팅. b1는 20이다(byte의 범위를 벗어나지 않아서)
int n2 = 99999;
byte b2 = (byte)n2; //타입 캐스팅. b2는 byte의 범위를 벗어나서
//데이터의 변형이 일어났으므로 99999가 아니다.
Type Promotion 이란, 타입캐스팅과 반대로 크기가 더 작은 자료형을 더 큰 자료형에 대입하는 것을 의미한다. 예를 들어서 byte(1byte) 형의 데이터를 int(4byte)형에 대입할 때 발생한다. 작은 데이터가 큰 곳으로 들어가기 때문에 이 때는 데이터의 손실이나 변형이 오지 않는다. 그래서 명시적으로 적지 않아도 자동으로 변환이 된다.
byte b1 = 20;
int n1;
n1 = b1; //타입 프로모션. n1은 20이다.
이러한 형변환은 primitive type 뿐만 아니라 reference type에서도 가능하다. 물론 클래스의 상속 관계에서만 가능하다. 부모 클래스로의 형변환(Upcast)은 자동적으로 가능하지만, 자식 클래스로의 형변환(Downcast)은 명시적으로 타입캐스팅 해야한다.
7. 1차 및 2차 배열 선언 방법
배열은 같은 타입의 데이터를 연속된 공간에 저장할 수 있는 자료구조다.
1차원 배열 선언
int [] arr1;
int arr2 [];
int [] arr3 = new int[20];
위와 같이 1차원 배열을 선언할 수 있다.
배열은 크기를 정해주어야 한다. 마지막줄은 배열의 크기까지 정해준 것이다. int형의 연속된 20개의 데이터를 저장할수 있는 공간을 arr3로 명칭한 것을 의미한다.
배열은 0부터 차례대로 값을 할당한다.
arr3[0] = 1;
arr3[1] = 2;
int arr4 [] = {1,2,3,4,5};
마지막 줄처럼 선언과 초기화를 동시에 할수도 있고, 여러 원소를 한번에 할당할 수 있다.
자바 배열은 힙 영역에 실제 메모리가 할당된다.
위와 같이 할당할 경우에는 arr4 배열은 Runtime Stack의 힙 영역 주소값을 가지게 되는데, int타입 요소를 5개 할당하여 사용한다. 첫번째 주소값을 가리킨다.
2차원 배열 선언
2차원 배열은 1차원 공간을 여러 행으로 쌓아놓은 것이다.
2차원 배열의 크기는 행과 열 순으로 정해주면 된다.
선언과 초기화 방법은 1차 배열과 비슷하다.
int [][] arr1 = new int[2][2];
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
int arr2[][] = {{1,2},{3,4}};
//행의 크기만 정한후에 각 행마다 다른 길이의 열을 할당할 수 있다.
int[][] arr3 = new int[3][];
arr3[0] = new int[3];
arr3[1] = new int[2];
arr3[2] = new int[5];
8. 타입 추론, var
타입 추론이란 데이터의 타입(자료형)을 코드에 명시하지 않더라도 컴파일러가 컴파일 과정에서 타입을 추론하여 자동으로 정해주는 것을 말한다.
자바 10버전 이상부터 타입 추론을 사용하는 var이 추가되었다.
var은 초기화값이 있는 지역변수로만 선언이 가능하다.
var n1 = "hi!"; //String형으로
var n2 = 10; //int형으로
'Java > 개념정리' 카테고리의 다른 글
[Java] Stack (0) | 2021.09.23 |
---|---|
[ Java ] LinkedList (0) | 2021.09.23 |
[ Java ] JVM란? 자바의 실행 원리 알아보기 (0) | 2021.09.14 |
[ Spring ] Java 설정 파일 사용 및 설명 (@Configuration, @Bean, @EnableWebMvc) (0) | 2021.02.19 |
[ Java ] JDBC - PreparedStatement (0) | 2020.12.08 |