목차
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
github.com/whiteship/live-study/issues/2
프리미티브 타입 종류와 값의 범위 그리고 기본 값
프리미티브 타입이란?
- 자바의 데이터 타입에는 크게 프리미티브(Primitive) 원시 자료형과 레퍼런스(Reference) 참조 자료형이 존재
- 두 타입의 큰 차이점은 데이터 생성 시 메모리 공간에 데이터가 들어가는지 혹은 데이터를 참조하는 주소 값이 들어가는지이다.
프리미티브 타입 종류
프리미티브 타입은 또 '수치 타입'과 '블리언 타입'으로 나누어진다.
수치 타입
정수 타입
타입 명 | 크기(byte) | 표현 가능 범위 | 기본 값 |
byte | 1 | -128 ~ 127 | 0 |
short | 2 | -32768 ~ 32767 | 0 |
char | 2 | 모든 유니코드 문자 | '\u0000' |
int | 4 | -2147483648 ~ 2147483647 | 0 |
long | 8 | -9223372036854775808 ~ 9223372036854775807 | 0L |
부동소수점 타입
타입 명 | 크기(byte) | 표현 가능 범위 | 기본 값 |
float | 4 | ± (1.40129846432481707e-45 ~ 3.40282346638528860e+38) | 0.0f |
double | 8 | ± (4.94065645841246544e-324d ~ 1.79769313486231570e+308d) | 0.0d |
블리언 타입
타입 명 | 크기(byte) | 표현 가능 범위 | 기본 값 |
boolean | 1 | true, false | false |
프리미티브 타입과 레퍼런스 타입
프리미티브 타입
- 위에서 설명한 것처럼 메모리 공간에 데이터(값)가 들어가져 있다.
- 각각의 크기에 맞게 표현 가능 범위가 정해져 있으며 기본 값을 제공하지만 될 수 있으면 초기화를 하여 사용하는 것을 권장한다.
레퍼런스 타입
- 레퍼런스 타입 종류
- 클래스 타입
- 인터페이스 타입
- 배열 타입
- 열거 타입
- 레퍼런스 타입의 경우 메모리 할당 시 해당 데이터로 접근할 수 있는 '주소 값'이 저장된다.
- 기본 값은 'null'이며, 만약 기존에 데이터로 접근할 수 있는 '주소 값'이 존재하였다가 이후 'null'로 데이터가 변경된다면 GC(Garbage Collection)에 의하여 사용되지 않는 메모리로 판단되어 메모리 릴리즈 된다.
리터럴
리터럴이란 소스 코드에서 데이터 값을 직접 표현하는 것
정수 리터럴
2진수 리터럴
- 데이터 앞에 '0b' 시작
- 0b0111 → 7(10진수)
8진수 리터럴
- 데이터 앞에 '0' 시작
- 010 → 8(10진수)
10진수 리터럴
- 10 → 10(진수)
16진수 리터럴
- 데이터 앞에 '0x' 시작
- 0x20 → 32(10진수)
실수 리터럴
Float 리터럴
- 데이터 뒤에 'f'
- 0.123f
Double 리터럴
- 데이터 뒤에 'D'
- 0.123D
데이터 뒤에 어떤 문자도 붙지 않는 실수 표현의 경우 double 타입이 된다.
문자/문자열 리터럴
문자 리터럴
- Single Quote '' 로 문자 표현
- 'A', 'B', 'C'
- 유니코드 값으로 지정 가능
- \uae00a
문자열 리터럴
- Double Quote ""로 문자열 표현
- "ABC"
논리 타입 및 null 리터럴
논리 타입
- true/false 표현하거나 논리식의 결과의 반환 값으로 표현
null 리터럴
- 레퍼런스 타입에만 사용 가능
변수 선언 및 초기화 방법
자바에서 변수 선언과 초기화는 좌항(변수 타입과 변수명), 그리고 우항(초기화 값)으로 구분된다.
int a = 0;
- 좌항 = int, a
- int : int type
- a : variable name
- 우항 = 0
- 초기화 값
String b = "abc";
- 좌항 = String, b
- String : String type
- b : variable name
- 우항 = "abc"
- 초기화 값
변수의 스코프와 라이프 타임
변수의 스코프는 기본적으로 변수가 선언된 블록 내부이다.
Class A {
int a = 0;
public void printB(int b) {
int c = 3;
System.out.println(b);
}
}
- 변수 a의 스코프는 클래스 A의 내부이다.
- 물론 변수 a는 static variable이 아니기 때문에 클래스 A가 인스턴스로 생성된 후 참조 가능하다.
- printB() 함수의 파라미터 변수 b와 변수 c의 스코프는 함수 printB()의 내부이다.
Static
- static 변수 및 함수는 클래스가 인스턴스화 되지 않아도 사용 가능하다.
- 또한 static 변수의 경우 해당 클래스의 인스턴스에서 공유된다.
타입 변환, 캐스팅 그리고 타입 프로모션
자바에는 두 가지 타입 변환이 가능하다.
- 자동 타입 변환(타입 프로모션)
- 강제 타입 변환(캐스팅)
자동 타입 변환
- 자동 타입 변환은 프로그램 실행 도중 일어나며 작은 크기를 가지는 타입이 큰 크기를 가지는 타입으로 저장될 때 발생
- 또한 큰 타입과 작은 타입을 연산하는 경우 작은 타입이 큰 타입으로 자동 타입 변환된다.
byte a = 10;
int b = a; // byte type 변수 a는 더 큰 int type으로 자동 타입 변환
강제 타입 변환
- 코드에서 강제로 타입 변환을 지정할 수 있다.
- 그러나 큰 타입 → 작은 타입으로 강제 타입 변환 시 데이터 표현 범위의 차이로 인해 값의 손실이 발생할 수 있다.
public class Application {
public static void main(String args[]){
int a = 1234567890;
byte b = (byte)a;
System.out.println(a); // 1234567890 출력
System.out.println(b); // -46 출력
}
}
1차 및 2차 배열 선언하기
배열은 동일 타입의 값을 여러 개 취급할 수 있는 기능이다.
1차 배열 선언
int[] ref = new int[5]; // 0으로 초기화
int ref[] = new int[5]; // 0으로 초기화
int [] ref = {0,0,0,0,0};
int [] ref = new int[5] {0,0,0,0,0};
int [] ref = new int[] {0,0,0,0,0};
- new int[5]에 의하여 int type 5개 배열 인스턴스가 생성
- ref는 위에서 생성된 배열 인스턴스를 참조하는 참조 변수
2차 배열 선언
2차원 배열의 경우 [x][y]와 같이 선언 가능하며 세로 길이가 x, 가로길이가 y인 2차원 배열이 생성된다.
int[][] ref = new int[3][4]; // 세로길이 3, 가로길이4 2차원 배열 생성
또한 2차원 배열의 경우 행(가로)과 열(세로)을 분리하여 선언할 수 있다.
int[][] ref = new int[3][]; // 세로 길이만 지정되고, 가로 길이는 명시되지 않음
ref[0] = new int[2]; // 첫 번째 세로 줄의 경우 가로 길이가 2
ref[1] = new int[3]; // 두 번째 세로 줄의 경우 가로 길이가 3
ref[2] = new int[4]; // 세 번째 세로 줄의 경우 가로 길이가 4
- 위와 같이 가로, 세로 길이가 일정하지 않은 배열을 가리켜 'Ragged Array'라 한다.
타입 추론, var
타입 추론이란 코드 작성 시 타입이 정해지지 않았지만 컴파일러가 그 타입을 유추하는 것이다.
var 키워드를 사용하는 타입 추론은 Java Version 10부터 지원하였다.
사용법
// 기존
String str = "Hello, World!";
// Java 10 var 사용
var str = "Hello, World!";
- 위와 같이 기존 타입을 명시하지 않고 컴파일러가 data value 통하여 그 타입을 유추할 수 있다.
- 다만 data value가 function return value인 경우 가독성이 떨어질 수 있으므로 주의하며 사용해야 한다.
var str; // 컴파일 에러 발생
str = "123";
- 또한 var 타입 추론의 경우 생성과 동시에 초기화가 필수적이며 위와 같이 사용할 경우 컴파일 에러가 발생한다.
'자바 개발자되기' 카테고리의 다른 글
자바 스터디 3주차 : 연산자 (0) | 2020.11.27 |
---|---|
자바 문자열 결합 (0) | 2020.11.23 |
캐싱 정책 Inline Cache, Cache Aside (0) | 2020.11.18 |
비관적 락, 낙관적 락 (0) | 2020.11.12 |
Database Lock과 Blocking (0) | 2020.11.10 |