1. 기본 개념
자바의 자료형은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉩니다.
기본형(Primitive Type):
- 실제 데이터 값을 저장
- 메모리에 직접 값을 저장
- Stack 메모리에 저장
- 8가지 기본형 존재
참조형(Reference Type):
- 객체의 주소를 저장
- Heap 메모리에 데이터 저장
- 배열, 클래스, 인터페이스 등
2. 기본형 자료형 상세
종류 | 자료형 | 크기 | 범위 | 기본값 |
---|---|---|---|---|
논리형 | boolean | 1byte | true/false | false |
문자형 | char | 2byte | 0 ~ 65,535 | '\u0000' |
정수형 | byte | 1byte | -128 ~ 127 | 0 |
short | 2byte | -32,768 ~ 32,767 | 0 | |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 | 0 | |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
0L | |
실수형 | float | 4byte | ±3.4E-38 ~ 3.4E+38 | 0.0f |
double | 8byte | ±1.7E-308 ~ 1.7E+308 | 0.0d |
기본 자료형 관련 발음:
- byte: 바이트
- short: 쇼트
- int: 인트
- long: 롱
- float: 플로트
- double: 더블
- char: 캐릭터 또는 차
- boolean: 불리언
용량 단위:
- 1 bit(비트): 0과 1을 표현할 수 있는 최소 단위
- 1 byte(바이트) = 8 bits
- 1 KB(킬로바이트) = 1,024 bytes
- 1 MB(메가바이트) = 1,024 KB
- 1 GB(기가바이트) = 1,024 MB
- 1 TB(테라바이트) = 1,024 GB
참고 : byte는?
- 컴퓨터에서 데이터를 저장하는 기본 단위
- -128 ~ 127 까지의 정수를 저장할 수 있음
- 파일 처리나 네트워크 통신에서 자주 사용됨
// byte 사용 예시
byte b1 = 127; // 최대값
byte b2 = -128; // 최소값
// byte b3 = 128; // 컴파일 에러: byte 범위 초과
3. 주의사항과 자주하는 실수
**1. 정수형 리터럴의 기본타입은 int
long number = 123456789123; // 에러
long number = 123456789123L; // 정상
- 에러 발생 이유:
- 자바에서 정수 리터럴의 기본 타입은 int (4byte)
- 123456789123은 int의 범위(-2^31 ~ 2^31-1)를 초과
- 컴파일러는 이 숫자를 먼저 int로 해석하려고 시도
- int로 표현할 수 없는 크기이므로 컴파일 에러 발생
- 해결방법
- long number = 123456789123L; // L을 붙여서 명시적으로 long 타입임을 표시
**2. 실수형 리터럴의 기본타입은 double
float f = 3.14; // 에러
float f = 3.14f; // 정상
- 에러 발생 이유
- 자바에서 실수 리터럴의 기본 타입은 double (8byte)
- float은 4byte이므로 double → float 변환 시 정밀도 손실 가능
- 자바는 이런 암묵적 형변환을 허용하지 않음
- 해결방법
- float f = 3.14f; // f를 붙여서 명시적으로 float 타입임을 표시
**3. char와 String의 차이
char c = 'A'; // 한 문자
String s = "A"; // 문자열
이유
**명시적인 타입 안전성
long num = 2147483648; // 컴파일 에러!
// 이 숫자가 int의 범위를 넘는다는 것을 개발자가 인지하도록 함
long num = 2147483648L; // OK
**타입의 기본값 설정
// 자바는 기본적으로
int -> 정수의 기본 타입
double -> 실수의 기본 타입
// 만약 이렇게 했다면?
float f = 3.14; // double 값을 float에 넣으려고 해서 정밀도 손실 가능성
차이점
- char (한문자,'A')
- 기본형(primitive type)
- 2byte 크기
- 단일 문자만 저장 가능
- 작은따옴표(' ') 사용
- 유니코드 문자 하나를 저장
- 스택 메모리에 직접 저장
- String (문자열, "A~")
- 참조형(reference type)
- 문자열을 저장하는 클래스
- 여러 문자를 저장 가능
- 큰따옴표(" ") 사용
- 내부적으로 char[]로 문자들을 관리
- 힙 메모리에 객체로 저장
// char 사용 예시
char c1 = 'A';
char c2 = '가';
char c3 = '\u0041'; // 유니코드 직접 사용
// String 사용 예시
String s1 = "Hello";
String s2 = new String("Hello");
String s3 = "A" + "B"; // 문자열 연결 가능
컴파일 에러 예시:
char c = "A"; // 에러: String을 char에 할당 불가
String s = 'A'; // 에러: char을 String에 할당 불가
char c = ''; // 에러: char은 반드시 하나의 문자가 필요
String s = ""; // 정상: 빈 문자열 허용
실무에서의 활용:
// 문자 처리
char grade = 'A';
if(grade == 'A') {
System.out.println("최고 등급");
}
// 문자열 처리
String name = "John";
if(name.equals("John")) {
System.out.println("이름이 John입니다");
}
이러한 구분은 자바의 타입 안정성을 보장하고, 메모리를 효율적으로 사용하기 위한 설계입니다.
4. 내부 작동 방식
- 기본형: Stack 메모리에 직접 값 저장
- 참조형: Stack에는 참조 주소만 저장, 실제 객체는 Heap에 저장
5. 형변환(Type Casting)
// 자동 형변환 (작은 타입 → 큰 타입)
byte b = 100;
int i = b; // 자동 형변환
// 명시적 형변환 (큰 타입 → 작은 타입)
int i = 100;
byte b = (byte)i; // 명시적 형변환
6. 실무 활용 예시
// 금융 계산시 BigDecimal 사용
// float나 double은 부동소수점 오차 발생
BigDecimal money = new BigDecimal("10000.55");
BigDecimal tax = new BigDecimal("0.1");
BigDecimal total = money.multiply(tax);
// 날짜 계산
LocalDate today = LocalDate.now();
LocalDate futureDate = today.plusDays(7);
- BigDecimal은 Java에서 제공하는 정확한 십진수 연산을 위한 클래스
**주요 메서드
// 생성
BigDecimal num1 = new BigDecimal("10.5");
BigDecimal num2 = new BigDecimal("3");
// 기본 연산
BigDecimal sum = num1.add(num2); // 덧셈
BigDecimal diff = num1.subtract(num2); // 뺄셈
BigDecimal prod = num1.multiply(num2); // 곱셈
BigDecimal quot = num1.divide(num2, 2, RoundingMode.HALF_UP); // 나눗셈
// 비교
int result = num1.compareTo(num2); // 음수, 0, 양수
boolean isEqual = num1.equals(num2); // true/false
7. 자바스크립트와의 주요 차이점
- 자바는 정적 타입 언어로, 변수 선언시 타입을 명시해야 함
- 자바스크립트는 동적 타입 언어로, 타입이 자유롭게 변경 가능
- 자바는 기본형과 참조형이 명확히 구분됨
- 자바스크립트는 모든 것이 객체(원시 타입 제외)
이러한 차이로 인해 자바는 타입 안정성이 높고 컴파일 시점에 오류를 발견할 수 있다는 장점이 있습니다.
'자바 > 자바 기초' 카테고리의 다른 글
자바의 클래스(Class) (0) | 2025.05.01 |
---|---|
자바의 주요 메서드 (0) | 2025.04.30 |
자바와 자바스크립트의 차이점 (0) | 2025.04.30 |
1. 자바 파일 생성하기 (0) | 2025.04.28 |
자바 필수 학습 순서 (0) | 2025.04.28 |