자바/자바 기초

2. 자바의 자료형(Data Type)

lamarcK 2025. 4. 28. 16:34

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