백기선 자바 스터디 2: 타입, 변수, 배열 - Sat, Jan 2, 2021
What is type variable?
자바 프리미티브 타입
Data Type | Default Value (for fields) | min | max |
---|---|---|---|
byte | 0 | -128 | 127 |
short | 0 | -32768 | 32767 |
int | 0 | -2^31 | 2^31 - 1 |
long | 0L | -2^63 | 2^63 -1 |
float | 0.0f | 32bit single precision | (IEEE754 참고) |
double | 0.0d | 64bit double precision | |
char | ‘\u0000’ | ‘\u0000’ | ‘\uffff’ |
boolean | false | false | true |
- 참고로 String 및 Object의 기본값은 null 이다.
- boolean 의 크기는 표준에 정의되어 있지 않지만 oracle JVM의 경우 8bits.
레퍼런스 타입
자바에는 4가지 레퍼런스 타입이 있다.
- class types
- interface types
- type variables
ex: <T>
- array types
- 3번이 참조라는 건 처음 알았다.
- String도 class에 속하는 듯한 느낌. (TODO: 확인 필요)
- 참조 타입에 의해 참조되는 객체는 힙에 저장되고 gc의 대상이 된다.
리터럴
- 자바독
- 1, 3.0, “hello”, true 등
1_000_000
처럼 숫자 사이에 _를 사용 가능
변수 선언 및 초기화하는 방법
- 멤버 변수는 선언과 동시에 초기화 가능
- 멤버 변수 초기화 생략시 기본 값을 갖는다.
- 지역변수는 반드시 초기화가 필요하다!
변수 스코프
- 일반적인 지역변수는 block 스코프이다.
- 내부 블록은 외부 블록에서 선언된 변수의 참조가 가능하다.
- 문득 생각나서 확인해 보니 closure가 있다.
int x = 3;
int[] a = {2, 4, 6, 8};
Arrays.stream(a).forEach((i) -> {
System.out.println(i * x);
});
타입 컨버전
- C 언어에서 캐스팅이라고 사용했었는데 공식 문서에는 conversion이라고 나와 있었다.
- 스펙에 의해 지정된 타입간 컨버전이 가능한다.
- 클래스의 경우 상속 관계에 있는 클래스들간 컨버전이 가능하다. 런타임 에러에 주의할 것!
타입 프로모션
- 값의 범위가 작은 타입에서 큰 타입으로 캐스팅(A widening primitive conversion)이 필요할 경우 자동으로 캐스팅이 일어나는 현상
int x = 3;
double d = 0.3f + x;
타입 추론, var
- 자바 10부터 도입
- 지역 변수에 한해 var 키워드 사용 가능
Map<Integer, String> map = new HashMap<>();
var idToNameMap = new HashMap<Integer, String>();
var monsters = new ArrayList<Monster>();
//...
for (var m: monsters) {
}