자바에서 변수의 데이터 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉜다. 이 두 가지의 차이점을 정확히 이해하는 것이 객체 지향 프로그래밍에서 중요하다.
기본형은 변수에 값을 직접 저장하는 타입이다. 즉, 기본형 변수는 실제 데이터 자체를 저장하므로, 바로 연산이 가능하다. 대표적인 기본형 데이터 타입으로는 int, long, double, boolean 등이 있다.
int a = 10;
int b = 20;
int sum = a + b; // a와 b는 값 자체를 가지고 있어 연산 가능
위 예시에서 a와 b는 값을 직접 담고 있으므로, 더하기 연산이 바로 가능하다.
참조형은 변수에 객체가 저장된 메모리의 주소(참조값)를 저장하는 타입이다. 즉, 참조형 변수는 값이 아닌 객체의 위치를 저장하고, 그 위치를 통해 객체에 접근하여 값을 사용한다. 대표적인 참조형 데이터 타입으로는 배열과 클래스가 있다.
Person p1 = new Person(); // p1은 Person 객체의 주소를 저장
p1.age = 30; // p1이 가리키는 객체의 age 필드에 값 저장
참조형 변수는 객체의 메모리 주소를 저장하고 있으며, 객체에 접근하려면 해당 주소를 통해야 한다. 예를 들어 p1.age = 30;은 p1이 참조하는 객체의 age 필드에 값을 대입하는 과정이다.
값의 저장 방식: 기본형은 값 자체를 변수에 저장하지만, 참조형은 메모리 주소(참조값)를 저장한다.
연산 가능 여부: 기본형 변수는 값을 바로 연산할 수 있지만, 참조형 변수는 참조값을 연산할 수 없고, 객체 내부의 기본형 데이터에 접근하여 연산해야 한다.
연산 차이: 기본형은 바로 연산이 가능하다.
public class Main {
public static void main(String[] args) {
int x = 10; // 기본형 변수 x에 값 10 할당
int y = 20; // 기본형 변수 y에 값 20 할당
int sum = x + y; // x와 y를 더한 값을 sum에 저장
}
}

반면에 참조형 변수끼리의 연산은 불가능하다.
Person p1 = new Person();
Person p2 = new Person();
p1 + p2; // 오류 발생, 참조형끼리는 연산 불가

그러나, 참조형 객체 내부의 기본형 멤버 변수는 연산이 가능하다.
class Person {
String name;
int age;
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person(); // Person 객체 생성
Person p2 = new Person(); // Person 객체 생성
p1.age = 30;
p2.age = 40;
int totalAge = p1.age + p2.age; // 연산 가능, age는 기본형
}
}

기본형은 소문자로 시작하며, 자바에서 제공하는 데이터 타입이다.
문자열(String)은 자바에서 특별한 존재이다. 사실 String은 클래스이므로 참조형에 속하지만, 기본형처럼 문자를 바로 대입할 수 있는 편리함을 제공한다.
String name = "John"; // 문자열 값을 바로 대입
String은 기본형처럼 사용할 수 있는 참조형으로 기억하면 좋다.