본문 바로가기

프로그래밍언어/JAVA

[Java] 변수와 기본형 데이터 타입 완벽 이해하기 (2편)

지난 글에서는 int, double, char, boolean 같은 기본형(Primitive Type) 을 배웠습니다.
이번 글에서는 Java에서 아주 중요한 개념인 **참조형(Reference Type)**과 **객체(Object)**를 입문자 눈높이에서 천천히 알아봅니다.

🔸 복습: 데이터 타입은 두 가지

분류 설명 예시
기본형 하나의 값만 저장 int, double, boolean, char
참조형 여러 데이터나 기능이 모인 구조 String, 배열, 클래스 등
 

🔹 객체(Object)란 뭘까?

객체란 데이터(속성) + 동작(기능) 이 묶여 있는 '하나의 덩어리'예요.

🧑‍🏫 예: 사람이라는 객체를 생각해봅시다

  • 속성: 이름, 나이, 키
  • 동작: 인사하다, 걷다

Java에서는 이렇게 속성과 동작이 함께 있는 구조를 "객체"라고 합니다.
이런 객체를 만들기 위한 설계도가 **클래스(class)**예요.

 

🔹 참조형 데이터 타입이란?

참조형은 실제 데이터를 저장하는 게 아니라, Heap 메모리에 있는 객체의 위치(주소)를 저장해요.

✅ 대표적인 참조형 타입

타입 설명
String 문자열 (문자 여러 개의 모음)
배열 (int[]) 같은 타입의 데이터를 여러 개 저장
클래스 내가 만든 데이터 구조
 

🔍 기본형 vs 참조형 차이 (비유로 쉽게!)

구분기본형 예시 int x = 10;참조형 예시 String s = "Java";
구분 기본형 예시  int x = 10;  참조형 예시  String s = "Java"; 
저장 방식 값 자체 저장 (10) 실제 "Java"는 다른 공간에 있음
변수 내용 숫자 10 "Java"가 있는 위치(주소)
메모리 Stack Stack에 주소, Heap에 실제 값
 

📌 비유:

  • 기본형은 물건 그 자체를 손에 쥐고 있는 상태
  • 참조형은 물건이 보관된 창고 주소를 손에 들고 있는 상태

 

📘 실습: 참조형의 실제 동작 보기

public class ReferenceTypeExample {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");

        System.out.println(str1 == str2); // true (문자열 상수 풀)
        System.out.println(str1 == str3); // false (new로 생성된 객체는 별도 공간)

        System.out.println(str1.equals(str3)); // true (내용 비교)
    }
}

✨ 해설

  • == : 참조형 변수끼리는 주소를 비교합니다.
  • .equals() : 내용 자체를 비교합니다.

 

🔍 배열도 참조형!

int[] nums = {1, 2, 3};
System.out.println(nums[0]); // 1

배열도 참조형이기 때문에, nums는 Heap에 저장된 배열의 주소를 가리킵니다.

 

✅ 참조형 변수의 주의점

주의할 점 설명
== 대신 .equals() 사용 참조형의 값 비교는 equals()로 해야 정확해요
null 값 가능 참조형 변수는 null을 가질 수 있고, 이때 사용하면 NullPointerException 발생
메모리 구조 차이 Stack에 변수, Heap에 데이터 → GC(가비지 컬렉터)가 정리함
 

🧠 추가 팁: String은 특별한 참조형

String a = "Java";
String b = "Java";
String c = new String("Java");

System.out.println(a == b); // true (문자열 상수 풀)
System.out.println(a == c); // false (new는 새 주소)

자바는 String을 효율적으로 관리하기 위해 **문자열 상수 풀(String pool)**을 사용합니다.
즉, "Java"는 이미 있는 문자열이면 재사용해요!

 

🎯 정리 요약

구분 기본형 참조형
값 저장 직접 저장 주소(참조) 저장
메모리 위치 Stack Stack(주소) + Heap(실제 데이터)
null 가능 ✅ 가능
비교 방식 == equals() 사용해야 안전
 

📘 다음 글 예고

다음 글에서는 Java 입문자들이 자주 겪는 변수 타입 관련 실수와 비교 실험을 다룹니다.
boolean에 숫자 넣기, byte 오버플로우, ==와 .equals()의 차이 등,
실수하기 쉬운 코드들을 예제로 직접 확인해볼 수 있어요!

 

[Java] 입문자가 자주 틀리는 변수 타입 실수 완벽 정리 - 실습 해설

Java를 처음 배우다 보면 헷갈리는 문법과 오류들이 꼭 나옵니다.이번 글에서는 실수하기 쉬운 변수 선언과 데이터 타입 비교 방식을 예제로 정리해볼게요. ✅ 1. boolean에 숫자 1을 넣으면?boolean b

hrlim.tistory.com

 

 

💬 연습 문제

다음 코드를 실행해보고 결과를 예측해보세요!

String a = "hello";
String b = new String("hello");

System.out.println(a == b);        // ?
System.out.println(a.equals(b));   // ?