오늘 다뤄볼 내용은 자바를 공부할 때 많은 사람들이 헷갈려 하는 "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