
프로그래밍을 배우면서 가장 헷갈리는 개념 중 하나가 "기본 타입(Primitive Type)과 객체(Object)의 차이"입니다.
이번 글에서는 이 개념을 쉽게 이해할 수 있도록 정리해보겠습니다.
기본 타입은 값 자체를 저장하는 데이터 타입입니다.
즉, 메모리에 값 그 자체가 저장되며, 비교할 때도 값만 확인하면 됩니다.
| 타입 | 크기 | 예제 값 |
|---|---|---|
byte | 1 byte | 100 |
short | 2 bytes | 30000 |
int | 4 bytes | 10, 42 |
long | 8 bytes | 1000000L |
float | 4 bytes | 3.14f |
double | 8 bytes | 3.1415926535 |
char | 2 bytes | 'A', '가' |
boolean | 1 byte | true, false |
✔ 기본 타입의 특징
✅ 값 자체를 저장
✅ 연산 (+, -, *, /) 가능
✅ 비교할 때 == 사용 가능
📌 예제 코드
int a = 10;
int b = 10;
System.out.println(a == b); // true (값이 같음)
객체는 데이터(속성)와 행동(메서드)를 포함하는 복합적인 데이터 타입입니다.
자바에서 String, Scanner, ArrayList 같은 클래스들은 모두 객체입니다.
✔ 객체의 특징
✅ 속성(변수)과 행동(메서드)을 가짐
✅ new 키워드로 생성 (예외 존재)
✅ 메모리에는 값이 아닌 주소(참조값, reference) 가 저장됨
✅ 비교할 때 .equals() 사용 (값을 비교할 때)
📌 예제 코드
class Car {
String color;
void drive() {
System.out.println("자동차가 달립니다!");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.color = "빨강";
myCar.drive(); // "자동차가 달립니다!" 출력
}
}
== vs .equals() 차이점객체는 주소값(참조값)을 저장하므로 == 연산자로 비교하면 메모리 주소가 비교됩니다.
객체 내부의 실제 값을 비교하려면 .equals()를 사용해야 합니다.
📌 예제 코드
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false (메모리 주소 다름)
System.out.println(str1.equals(str2)); // true (값이 같음)
String은 객체인데 기본 타입처럼 보이는 이유자바에서 String은 사실 객체이지만, 문자열 풀(String Pool) 덕분에 기본 타입처럼 보일 수 있습니다.
String을 만드는 두 가지 방법String Pool 사용)String str1 = "Hello";
String str2 = "Hello";
"Hello"는 String Pool에 저장되며, 같은 값이 있으면 재사용됨.== 비교하면 true가 나올 수도 있음! 📌 예제
System.out.println(str1 == str2); // true (같은 객체를 참조)
new 키워드로 객체 생성String str3 = new String("Hello");
String str4 = new String("Hello");
new 키워드를 사용하면 Heap 메모리에 새로운 객체가 생성됨.== 비교하면 false (서로 다른 객체)..equals()를 사용해야 함.📌 예제
System.out.println(str3 == str4); // false (다른 객체)
System.out.println(str3.equals(str4)); // true (값 비교)
| 비교 기준 | 기본 타입 (int, double) | 객체 (String, Car) |
|---|---|---|
| 저장 방식 | 값 자체 저장 | 메모리 주소 저장 |
| 비교 방법 | == 사용 (값 비교) | == → 주소 비교, .equals() → 값 비교 |
| 속성 & 기능 | 없음 | 속성(데이터) + 기능(메서드) 포함 |
| 예제 | int a = 10; | String str = "Hello"; |
✅ 기본 타입은 단순한 값, 객체는 속성과 기능을 포함하는 복합 데이터
✅ 기본 타입 비교는 ==, 객체 비교는 .equals() 사용!
✅ String은 객체지만, 리터럴 방식("Hello")으로 만들면 기본 타입처럼 보일 수 있음
✅ Heap 메모리에 객체가 저장되고, 변수에는 주소(참조값)가 저장됨
이제 기본 타입과 객체의 개념이 더 명확해졌나요?
앞으로 코드를 작성할 때 ==와 .equals()를 잘 구분해서 사용하세요! 😊