1-1. 기본 자료형 (Primitive Data Types)

자바의 자료형은 크게 실제 값을 담는 기본형과 주소값을 담는 참조형으로 나뉜다. 아래는 메모리에 실제 값을 직접 저장하는 기본형 8가지다.

분류 자료형 크기 설명 예시 코드
정수형 byte 1 byte -128 ~ 127 범위의 정수 byte b = 10;
  short 2 byte -32,768 ~ 32,767 범위의 정수 short s = 20;
  int 4 byte 정수형 기본 타입 (가장 많이 사용) int userAge = 26;
  long 8 byte 범위를 초과하는 큰 정수 (끝에 L 접미사) long pop = 8000000000L;
실수형 float 4 byte 소수점 표현 (끝에 f 접미사) float f = 3.14f;
  double 8 byte 실수형 기본 타입 (더 높은 정밀도) double pi = 3.141592;
문자형 char 2 byte 단 하나의 문자 저장 (홑따옴표 사용) char grade = 'A';
논리형 boolean 1 byte 참(true) 또는 거짓(false) boolean isFun = true;

/blog/engineering/java/javabasic-1-suffix

1-2. 참조 자료형 (Reference Data Types)

기본형(Primitive Type)을 제외한 자바의 모든 타입은 참조형이다. 메모리 공간에 실제 데이터 값을 직접 밀어 넣는 기본형과 달리, 참조형은 실제 데이터가 생성된 메모리의 주소값(Heap 영역의 위치)을 저장하는 리모컨 역할을 한다.

  • 핵심 특징:
    • 데이터의 크기가 고정되어 있지 않고 동적으로 할당된다.
    • 값이 비어있음을 의미하는 null을 가질 수 있다. (기본형은 null 할당 불가)
  • 대표적인 종류: String (문자열), 배열 (Array), 객체 (Class), 인터페이스 등

💡 가장 많이 쓰는 참조형: 문자열 (String)

문자열은 자바에서 가장 빈번하게 사용되는 참조형 데이터다.
참조형 데이터를 다룰 때 가장 주의해야 할 점은 비교 연산자(==)의 동작 방식이다.
참조형에서 == 연산자는 ‘안에 들어있는 실제 내용’이 아니라
‘같은 메모리 주소를 가리키고 있는지(같은 리모컨인지)’를 비교한다.
따라서 문자열의 실제 텍스트 내용이 같은지 확인하려면 반드시 .equals() 메서드를 사용해야 한다.

// [참조형 String 객체 생성 및 비교 예제]
String str1 = new String("Java"); // 메모리(Heap)에 새로운 "Java" 공간 생성
String str2 = new String("Java"); // 메모리(Heap)에 또 다른 "Java" 공간 생성

// 1. 주소값 비교 (== 연산자)
System.out.println(str1 == str2);
// 출력: false (서로 다른 메모리 공간에 존재하므로 주소값이 다름)

// 2. 실제 데이터 값 비교 (.equals() 메서드)
System.out.println(str1.equals(str2));
// 출력: true (가리키는 위치는 달라도, 안에 들어있는 텍스트 값은 완벽히 같음)

💡 문자(char)와 문자열(String) 비교

  문자(char) 문자열(String)
  기본형 참조형
  홑따옴표('') 사용 쌍따옴표("") 사용
텍스트 자체 비교 == .equals()
설명 변수 안에 실제 데이터 값이 들어있기 때문 데이터가 들어있는 주소값을 가르키기 때문
    메모리 주소 비교할 때는 == 사용
비교 예시 if (a == 'A') if (str.equals("Hello"))

2. 형변환 (Type Casting)

변수의 타입을 다른 타입으로 변환하는 과정이다.

묵시적 형변환 (자동 형변환)

  • 작은 데이터타입에서 큰 타입으로 변환할 때 컴파일러가 알아서 변환해 준다.
  • 데이터 손실 없음
  • byteshort, charintlongfloatdouble

명시적 형변환 (강제 형변환)

  • 큰 자료형을 작은 자료형에 억지로 집어넣을 때 사용하며 (타입) 형태로 직접 명시해야 한다.
  • 데이터 손실 발생 가능
  • byteshort, charintlongfloatdouble
// 묵시적 형변환 예시
int num = 10;
double dNum = num; // int -> double 자동 변환 (10.0)

// 명시적 형변환 예시
double pi = 3.14;
int intPi = (int) pi; // double -> int 강제 변환 (소수점 날아가고 3만 저장)