Java '=='은 기본타입 '.equals()'은 객체; String은 둘다 가능할수도..

습토리·2025년 2월 23일

Java

목록 보기
14/32

Java 기초: 기본 타입과 객체 개념 완벽 정리

프로그래밍을 배우면서 가장 헷갈리는 개념 중 하나가 "기본 타입(Primitive Type)과 객체(Object)의 차이"입니다.
이번 글에서는 이 개념을 쉽게 이해할 수 있도록 정리해보겠습니다.


1. 기본 타입(Primitive Type)과 객체(Object)의 차이

1️⃣ 기본 타입이란?

기본 타입은 값 자체를 저장하는 데이터 타입입니다.
즉, 메모리에 값 그 자체가 저장되며, 비교할 때도 값만 확인하면 됩니다.

✔ 자바의 기본 타입 8가지

타입크기예제 값
byte1 byte100
short2 bytes30000
int4 bytes10, 42
long8 bytes1000000L
float4 bytes3.14f
double8 bytes3.1415926535
char2 bytes'A', '가'
boolean1 bytetrue, false

기본 타입의 특징
✅ 값 자체를 저장
✅ 연산 (+, -, *, /) 가능
✅ 비교할 때 == 사용 가능

📌 예제 코드

int a = 10;
int b = 10;

System.out.println(a == b); // true (값이 같음)

2️⃣ 객체(Object)란?

객체는 데이터(속성)와 행동(메서드)를 포함하는 복합적인 데이터 타입입니다.
자바에서 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();  // "자동차가 달립니다!" 출력
    }
}

2. == 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 (값이 같음)

3. String은 객체인데 기본 타입처럼 보이는 이유

자바에서 String은 사실 객체이지만, 문자열 풀(String Pool) 덕분에 기본 타입처럼 보일 수 있습니다.

String을 만드는 두 가지 방법

1️⃣ 문자열 리터럴 방식 (String Pool 사용)

String str1 = "Hello";
String str2 = "Hello";
  • "Hello"String Pool에 저장되며, 같은 값이 있으면 재사용됨.
  • == 비교하면 true가 나올 수도 있음!

📌 예제

System.out.println(str1 == str2); // true (같은 객체를 참조)

2️⃣ 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 (값 비교)

4. 기본 타입 vs 객체 비교 요약

비교 기준기본 타입 (int, double)객체 (String, Car)
저장 방식값 자체 저장메모리 주소 저장
비교 방법== 사용 (값 비교)== → 주소 비교, .equals() → 값 비교
속성 & 기능없음속성(데이터) + 기능(메서드) 포함
예제int a = 10;String str = "Hello";

📌 결론

기본 타입은 단순한 값, 객체는 속성과 기능을 포함하는 복합 데이터
기본 타입 비교는 ==, 객체 비교는 .equals() 사용!
String은 객체지만, 리터럴 방식("Hello")으로 만들면 기본 타입처럼 보일 수 있음
Heap 메모리에 객체가 저장되고, 변수에는 주소(참조값)가 저장됨

이제 기본 타입과 객체의 개념이 더 명확해졌나요?
앞으로 코드를 작성할 때 ==.equals()를 잘 구분해서 사용하세요! 😊

profile
재미난 삶을 살다

0개의 댓글