일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- API
- 오브젝트
- 클래스
- 쓰레드
- 프로세스
- jwt
- 항해99솔직후기
- Instance
- 인스턴스
- 회고록
- jvm
- IoC
- Dependency Injection
- 소셜로그인
- class
- 객체
- process
- inversion of control
- 객체지향 프로그래밍
- 항해99장점
- 소셜
- Thread
- DI
- 인스턴스화
- bean
- 스레드
- 항해99단점
- social login
- object
- 부트캠프추천
- Today
- Total
로운's 기술노트
[JAVA] 자료형 (FAQ포함) 본문
자료형은 크게 '기본 자료형'과 '참조 자료형'으로 나뉜다.
자바에는 총 8가지의 '기본 자료형'이 있으며, 그 외 모든 자료형은 '참조 자료형'이다.
자료형을 구분하는 이유는 저장 방식이 다르기 때문이다.
구분 | 자료형 | 크기 (byte / bit) |
값의 범위 | 기본값 | ||
기본 자료형 |
부울대수 | boolean | 1 / 8 | true, false | false | |
정수 | byte | 1 / 8 | -2^7 ~ 2^7-1 | -128~127 | 0 | |
short | 2 / 16 | -2^15 ~ 2^15-1 | -32,768 ~ 32,767 | 0 | ||
int | 4 / 32 | -2^31 ~ 2^31-1 | -2,147,483,648 ~ 2,147,483,647 | 0 | ||
long | 8 / 64 | -2^63 ~ 2^63-1 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
0L | ||
실수 | float | 4 / 32 | ±(1.4E-45 ~ 3.4E38) | 단정도 실수형 (유효 자릿수 : 7) | 0.0f | |
double | 8 / 64 | ±(4.9E-324 ~ 1.8E308) | 배정도 실수형 (유효 자릿수 : 15) | 0.0(d) | ||
문자 (정수) |
char | 2 / 16 | 유니코드 문자 (0 ~ 2^16-1) |
‘\u0000’ | ||
참조 자료형 |
객체 (Object) |
배열, 클래스, 인터페이스 |
자료형의 정확한 구분을 위해선 메모리 구조를 먼저 알아야 한다.
이는 목적에 따라 3가지 영역으로 나뉘며, (물론 '레지스터 영역'까지 4가지이나 개발자 관점에선 크게 중요하지 않음)
첫번째는 '클래스(class) 영역', '정적(static) 영역', '상수(final) 영역', '메서드(method) 영역'이라는 4가지 이름으로 불린다.
두번째는 '스택(stack) 영역'으로 변수들이 저장되는 공간이며, 세번째는 힙(heap) 영역으로 객체들이 저장되는 공간이다.
Q. 기본 자료형과 참조 자료형의 차이는?
A. (1) 기본 자료형은 모두 소문자로 시작하는 반면, 참조 자료형은 모두 대문자로 시작한다.
참조 자료형이 소문자로 시작한다고 오류가 발생하지는 않지만, 개발자 간의 암묵적인 룰이므로 지키도록 한다.
(2) 기본/참조 자료형 모두 변수의 공간이 스택 메모리에 생성된다. 그러나 기본 자료형은 스택 메모리에 생성된 공간에
실제 변숫값을 저장하는 반면, 참조 자료형은 실제 데이터값을 힙 메모리에 저장하고, 이 힙 메모리의 위치값을 스택
메모리에 저장한다.
eg1. 기본 자료형 변수 복사
int a = 3;
int b = a;
b = 7;
System.out.println(a); // 3
System.out.println(b); // 7
eg2. 참조 자료형 변수 복사
int[] a = new int[] {3, 4, 5};
int[] b = a;
b[0] = 7;
System.out.println(a[0]); // 7
System.out.println(b[0]); // 7
Q. 정수형, 실수형 자료형이 여러 개인 이유는?
A. 예를 들어, 1 ~ 5까지의 정수만을 저장하는데 long을 사용한다면, 가능은 하지만 메모리 낭비가 심할 것이다.
이러한 메모리의 효율적인 관리를 위해 다양한 정수형, 실수형을 사용한다.
Q. 정수를 작은 범위의 자료형으로 캐스팅할 경우 결과는?
A. 자료형을 초과하는 정수형을 캐스팅하는 경우, 범위의 반대쪽 끝에서부터 다시 시작하는 서큘러(Circular) 구조를 보인
다. 즉, 정수값을 작은 자료형으로 다운캐스팅하면 해당 자료형의 범위에서 반대쪽 끝인 정숫값으로 변환된다.
eg. byte a = (byte)128; // -128로 변환
byte b = (byte)129; // -127로 변환
Q. 자료형의 범위는 왜 양수가 더 작을까?
A. 음수와 양수의 범위는 동일하다. 그러나 0이 양수로 속하게 되어 결국 양수 값에는 -1이 붙게 된다.
eg. byte의 음수 : -128 ~ -1 // 128개
byte의 양수 : 0 ~ 127 // 128개
Q. 캐스팅(Casting)이란?
A. 캐스팅은 형변환을 의미한다. 즉 좌변의 자료형에 맞게 우변의 형을 변형하는 것.
- 업캐스팅(UpCasting) : 하위 클래스의 정보를 담을 수 있는 객체에 상위 클래스의 자료형을 부여하여 상위 클래스처럼
사용하게 하는 것
- 다운캐스팅(DownCasting) : 하위 클래스의 정보를 담을 수 있는 객체의 자료형이 상위 클래스로 전환되어 있던 것(업
캐스팅된 객체)을 다시 되돌리는 것을 의미
# 참고
이지스 퍼블리싱 - 자바 완전정복
https://whatisthenext.tistory.com/146
https://velog.io/@smallcherry/Java-UpCastingAndDownCasting
'항해99_'22.01~04 > Java' 카테고리의 다른 글
[JAVA] 메서드_타입 변환 (0) | 2022.08.02 |
---|---|
[JAVA] 배열_객체 생성 및 출력 (0) | 2022.08.02 |
[JAVA] 배열_선언 방법 (0) | 2022.08.01 |