프로그래밍/JAVA

final을 붙였는데도 왜 안에 값은 바꿀 수 있을까?

카멜필름 2025. 6. 12. 15:57

오늘 다뤄볼 내용은 자바를 공부할 때 많은 사람들이 헷갈려 하는 "final과 객체 참조(reference)"에 대한 이야기입니다.

제가 유치원생도 이해할 수 있게 비유와 함께 아주 쉽게 설명해볼게요!🐼

 

Final을 붙였는데도 왜 안에 값은 바꿀 수 있나요?

 

 

비유로 쉽게 설명해볼게요!

🎁 등장인물:

  • 📦 data → 선생님이 준 "상자"
  • 🧸 new Data() → 상자 안에 들어 있는 "인형"
  • final → "상자에 인형 딱 한 번만 넣을 수 있음!"이라는 규칙

 

🧸 상황 1: final이 붙은 상자에 인형을 넣는다

final Data data = new Data();
  • 여기서 data라는 상자에 인형(Data 객체)을 넣었어.
  • 그런데 final이 붙었으니까 👉 다른 인형으로 바꿔치기 금지!

📛 그래서 이런 건 안 돼요:

data = new Data(); // ❌ 안됨! 다른 인형 넣으려 하니까
 

새롭게 추가하면 안된다는 말이에요~!


🧸 상황 2: 상자 안에 든 인형의 옷을 바꾼다

 
data.value = 10; data.value = 20;
  • 이건 상자 안에 든 인형의 "옷"을 바꾸는 거야!
  • 상자는 그대로인데, 인형이 입은 옷만 갈아입는 건 괜찮아! 👗

✔️ 그래서 이건 돼요!


🎯 요약 정리 해볼게요


개념 비유 가능 여부
final Data data = new Data(); 상자에 인형을 딱 한 번만 넣기 ✅ 가능
data = new Data(); 상자에 인형을 또 넣기 ❌ 금지
data.value = 10; 인형의 옷 바꾸기 ✅ 가능
 

🖼️ 그림으로 다시 정리!

+-------------------------+
|       변수 data         |   ← 이름표 (상자)
|-------------------------|
|     ➡  x001 주소값      |   ← 이건 new Data() 객체를 가리키는 참조값
+-------------------------+

          ↓

+-------------------------+
|   Data 객체 (x001)      |
|-------------------------|
|   value: 10             |   ← 이 값은 바뀔 수 있음!
+-------------------------+
  • data → 상자
  • new Data() → 인형
  • data.value = 10 → 인형의 옷 바꾸기 (OK!)
  • data = new Data() → 인형을 바꿔치기 (NO! 🚫)

📘 진짜 쉬운 결론 한 줄

final은 "상자에 무엇을 넣을지는 한 번만 정해",
"그 안에 든 물건은 얼마든지 바꿔도 괜찮아!" 🎁


정말 어려운 개념인데, 이렇게 접근하면 훨씬 쉬워요!
혹시 이 비유로도 헷갈리는 부분 있으면 언제든 댓글에 적어주세요

더 귀여운 예시로 쉽게 설명해드려요 😄
🔧🤖🍭

 

 

728x90
LIST