| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- MSA
- Spring Boot
- jvm
- Redis
- 자격증
- QueryDSL
- Docker
- orm
- data
- backend
- s3
- backenddeveloper
- 스터디
- CodeCommit
- mapping
- aws
- goorm
- 자바
- jpa
- nosql
- goorm x kakao
- bootcamp
- 오블완
- Cache
- spring
- 개발자
- serverless
- 기본형
- java
- 티스토리챌린지
- Today
- Total
gony-dev 님의 블로그
JAVA 기본형 데이터 타입 본문
지난 시간에는 JAVA 데이터 자료형의 기본형 타입과 참조형 타입에 대해 각 종류와 특징에 대해 알아보았다.
[JAVA] - JAVA 변수 종류
이번 시간에는 기본형 타입에 대해 더 자세히 알아보도록 하겠다.

1. 기본형 타입 - 정수형
자바 언어의 기본형 타입 중 정수형은 총 4가지로, byte, short, int, long이다.
int, long이 대부분 사용되며, byte, short는 나도 프로젝트에서 사용해 본 적이 거의 없다..
| 타입 | 기본값 | 할당되는 메모리 크기 | 데이터 표현 범위 |
| byte | 0 | 1 byte | -128 ~ 127 |
| short | 0 | 2 byte | -32,768 ~ 32,767 |
| int | 0 | 4 byte | -2,147,483,648 ~ 2,147,483,647 |
| long | 0L | 8 byte | -9,223,272,036,854,775,808 ~ 9,223,272,036,854,775,807 |
long 변수에 값을 대입할 때는 int 자료형의 최대 크기보다 큰 경우, 'L'을 반드시 붙혀주어야 한다.
'L'이 누락된다면, 컴파일 에러가 발생한다.
정수 오버플로우 / 언더플로우
메모리 크기를 고려하지 않는다는 가정하에 정수형 데이터를 모두 long으로 치부해도 되겠지만,
그렇지 않은 경우에 자신이 사용하고자 하는 데이터의 최소/최대 크기를 반드시 고려해야 한다.
이를 고려하지 않고 데이터를 저장하게 되면, 오버플로우/언더플로우가 발생하여 전혀 다른 값이 저장될 수 있기 때문이다.
- 오버플로우 | 해당 타입이 표현할 수 있는 최대 표현 범위보다 큰 수를 저장할 때 발생하는 에러
- 언더플로우 | 해당 타입이 표현할 수 있는 최소 표현 범위보다 작은 수를 저장할 때 발생하는 에러
예시 코드를 통해 알아보자.
public class MyClass {
public static void main(String[] args){
byte max = (byte) 245;
System.out.println(max);
}
}
byte 자료형의 데이터 표현 범위는 -128 ~ 127이다.
하지만 max 변수에 32637을 저장한다면 크기 범위를 넘어서는 행위이기에 오버플로우가 발생하여 잘못된 결과가 저장된다.

2진수 / 8진수 / 16진수
int 자료형은 10진수로 제공되지만 2진수, 8진수, 16진수로 변환하고 싶다면 다음과 같이 약속된 기호를 도입하면 된다.

2. 기본형 타입 - 실수형
자바의 실수 자료형은 float, double이 있다.
과거에는 실수를 표현할 때 float를 많이 사용했지만, 기술의 발달로 메모리 공간이 증가하게 되면서 double형의 사용 빈도수가 늘어나
현재는 double형을 가장 많이 사용한다.
| 타입 | 할당되는 메모리 크기 | 데이터 표현 범위 | literal 타입 접미사 |
| float | 4 byte | (3.4 X 10^-38) ~ (3.4 X 10^38)의 근사값 | F 또는 f |
| double | 8 byte | (1.7 X 10^-308) ~ (1.7 X 10^308)의 근사값 | D 또는 d(생략 가능) |
실수의 표현 오차
정수형에도 표현할 수 있는 표현 범위가 제한되어 있듯이, 실수형에도 소숫점을 표현하는 범위가 존재한다.
소숫점은 경우에 따라 무수히 많은 숫자를 포함한 계산 결과를 제공한다. 이러한 한계를 최소화하기 위해서 컴퓨터는 소수를 이진법으로 표현할 때 고정 소수점 방식이 아닌 부동 소수점 방식을 사용한다.
(부동 소수점 방식은 소수점 위치를 고정하지 않고, 가수와 지수로 나누어 표현하는 방식이다.
부동 소수점 방식을 사용하여 큰 범위의 실수까지도 표현이 가능하다는 장점이 있지만, 100% 정확하게 표현하는 것이 아니라서, 소수 연산 시 부정확한 실수의 계산값을 초래할 수 있다.
이러한 문제에 대해 자바는 두 가지 방법을 제안한다.
- 실수를 int, long 정수형 타입으로 치환하여 계산
- BigDecimal 클래스 사용
1번의 경우에는 소수점의 실수들을 정수로 바꿀 만큼의 10의 n제곱 연산을 하여 나온 두 정수들을 연산한 후에 다시 실수형으로 되돌리는 방식이다.(ex. 12.34 + 23.45 (치환)-> 1234 + 2345 -> 3579 (다시 변환)-> 35.79)
2번의 경우에는 소수의 크기가 9자리를 넘지 않으면 int를, 18자리를 넘지 않으면 long 타입을 사용하면 되지만 그 이상 넘어갈 경우에는 BigDecimal 클래스를 사용하여 표현 범위를 늘릴 수 있다.
실수의 유효 자릿수
실수의 유효 자릿수는 곧 정밀도를 의미한다.

| 타입 | 지수의 길이 | 가수의 길이 | 유효 자릿수 |
| float | 8 bit | 23 bit | 소수점 약 6~7자리까지 높은 확률로 정확히 표현 |
| double | 11 bit | 52 bit | 소수점 약 15~16자리까지 높은 확률로 정확히 표현 |
타입에 따라 유효 자릿수가 달라지며, 이 유효 자릿수는 좌측부터 시작되는 숫자 개수이다.
실수 오버플로우 / 언더플로우
실수형에서도 정수형과 마찬가지로 오버플로우, 언더플로우가 발생할 수 있다.
- 오버플로우 | 무한대
- 언더플로우 | 양의 최소값보다 작은 값으로 0이 된다.
3. 기본형 타입 - 논리형
2진수처럼 두 결과를 제공하는 논리형 자료형은 연산 결과에 대한 결과값이 제공된다.
진위를 가려내는 용도로 많이 사용되므로 if 연산자와 함께 종종 사용된다.

4. 기본형 타입 - 문자형
char형은 하나의 문자에 대한 자료형으로 사용된다.(문장이 아닌 문자 하나이다!)
char a = 'a';
위와 같이 사용되며 주의할 점은 작은 따옴표를 사용해야 한다는 점이다.
큰 따옴표는 문장을 의미하므로 char에 사용한다면 에러가 난다.
현재 위의 char형인 a는 문자 그대로 'a'를 출력하지만, 아스키코드나 유니코드를 통해서도 'a'를 출력할 수 있다.
- 아스키코드 | 1962년 "ANSI"가 정의한 미국 표준 정보교환 코드이며, 1963년 ASA에 의해 미국의 표준 부호가 됨.
- 7비트의 이진수 조합으로 만들어져 총 129개의 부호 사용 가능
- 아스키코드의 처음 32개는 프린터나 전송 제어용으로 사용되며, 나머지는 숫자와 로마 글자, 문장 기호를 나타낸다.
- 유니코드 | 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계
- 사용 중인 운영체제, 프로그램, 언어에 관계없이 문자마다 고유한 코드 값을 제공
- 모든 문자를 16bit로 표현
아스키코드와 유니코드
5. 문자열 자료형
문장을 의미하는 자료형으로, char형이 작은 따옴표로 감쌌던 대신 문자열 자료형은 큰 따옴표로 감싼다.
자바에서 사용되는 String 클래스는 문자열을 위해 제공되었으며, char[] 배열과 같은 동작 방식을 갖는다.
String 자료형을 이용하여 문자열 변수를 표현하는 방법은 두 가지가 있다.
String str1 = "Hello World!";
String str2 = new String("Hello World!");
두 객체를 비교하였을 때, 이 둘은 같다고 말할 수 있을까? 정답은 "아니다."
str1은 리터럴 표기 방식이며, JVM 내 힙 영역의 String Constant Pool에 저장된다.
상수풀에 저장되기 때문에 같은 문자열 value를 가진다면 재사용이 가능하다.
str2는 생성자 방식이며, str1과 마찬가지로 JVM 내 힙 영역의 String Constant Pool에 저장되고,
추가로 객체로 생성된다는 차이가 있다.
때문에 동일한 내용이라도 매번 새로운 객체가 생성된다. 이는 메모리 사용의 증가로 이어지므로 리터럴 표기를 권장한다.
또한 String 인스턴스는 한 번 생성되면 변경할 수 없다는 특징이 있다.
이를 불변 객체(Immutable Object)라고 불리며, 만약 자바에서 덧셈 연산자를 사용하여 문자열 결합을 수행하면, 기존 문자열의 내용이 변경되는 것이 아닌 내용이 합쳐진 새로운 String 인스턴스가 생성되게 한다.
출처
1- Inpa Dev
'JAVA' 카테고리의 다른 글
| JAVA의 꽃, 객체 지향 프로그래밍(OOP)의 클래스 문법 (1) | 2026.01.12 |
|---|---|
| JAVA 배열을 모르겠다고? 알려드리겠습니다! (0) | 2026.01.06 |
| JAVA 타입 형변환 (1) | 2026.01.04 |
| JAVA 변수 종류 (0) | 2025.12.30 |
| 자바 소스 코드 구조 (0) | 2025.12.29 |
