μμ
μμκ΄κ³μμλ μμ ν΄λμ€κ° νμ ν΄λμ€λ³΄λ€ μΌλ°μ μΈ κ°λ μ΄κ³ , νμ ν΄λμ€λ μμ ν΄λμ€λ³΄λ€ ꡬ체μ μΈ ν΄λμ€κ° λ©λλ€

λ©μλ μ€λ²λ‘λ vs λ©μλ μ€λ²λΌμ΄λ©
λ©μλ μ€λ²λΌμ΄λ©
μμν΄λμ€μ μ μν λ©μλκ° νμ ν΄λμ€μμ ꡬνν λ΄μ©κ³Ό λ§μ§ μμ κ²½μ°μ νμν΄λμ€μμ μ΄ λ©μλλ₯Ό μ¬μ μν μ μμ΅λλ€. μ΄λ₯Ό λ©μλ μ€λ²λΌμ΄λ© μ΄λΌκ³ ν©λλ€.
βͺμ€λ²λΌμ΄λ©μ νλ €λ©΄ λ°νν, λ©μλ μ΄λ¦, λ§€κ°λ³μκ°μ, μλ£νμ΄ λ°λμ κ°μμΌ ν©λλ€

λ€νμ±(polymorphism)
μμν΄λμ€μμ κ³΅ν΅ λΆλΆμ λ©μλλ₯Ό μ 곡νκ³ , νμν΄λμ€μμλ κ·Έμ κΈ°λ°ν μΆκ° μμλ₯Ό λ§λΆμ¬ ꡬννλ©΄ μ½λ μλ μ€μ΄λ€κ³ μ μ§λ³΄μλ νΈλ¦¬ν©λλ€. βͺ λ€νμ±μ μν΄ κ° ν΄λμ€μ μ¬λ¬ κ°μ§ ꡬνμ μ€νν μ μμΌλ―λ‘ νλ‘κ·Έλ¨μ μ½κ² νμ₯ν μ μμ΅λλ€. (νλμ κ°μ²΄κ° μ¬λ¬ κ°μ§ νμ μ κ°μ§ μ μλ κ²μ λ€νμ±μ΄λΌ νλ©°, λ°λλ‘ νκ°μ§ ννλ§ κ°μ§λ μ±μ§μ λ¨νμ±μ΄λΌ ν©λλ€.)
EX) μμμ λ°μλ€λ μ μ νμμ, VIPCustomerλ CustomerνμΌμλμμ§λ§, VIPCustomerμΌμλ μλ€.
VIPCustomer customerYeon = new VIPCustomer(); λ κ°λ₯.

μΆμν΄λμ€

1) μΆμν΄λμ€(abstract class)λ? β μΆμν΄λμ€μ ν΅μ¬ νΉμ§ 2κ°
- κ°μ²΄ μμ± λΆκ°
- new Computer() β
- μ΄μ : μμ§ “μμ±ν”μ΄ μλλΌμ.
- μΆμ λ©μλ(abstract method)λ₯Ό κ°μ§ μ μμ
- μΆμ λ©μλλ μ μΈλ§ μκ³ κ΅¬ν(λͺΈν΅ {})μ΄ μμ
- “μ΄ κΈ°λ₯μ νμ ν΄λμ€κ° κΌ λ§λ€μ΄λΌ!” κ°μ κ·μΉ
2) computerλ μΆμν΄λ

- display() / typing() μ μΆμ λ©μλ
- “μ»΄ν¨ν°λΌλ©΄ νλ©΄ μΆλ ₯(display)κ³Ό νμ΄ν(typing)μ μμ΄μΌ νλλ°,
ꡬ체μ μΌλ‘ μ΄λ»κ² ν μ§λ μ’ λ₯λ§λ€ λ€λ₯΄λκΉ μμμ΄ κ΅¬νν΄!”
- “μ»΄ν¨ν°λΌλ©΄ νλ©΄ μΆλ ₯(display)κ³Ό νμ΄ν(typing)μ μμ΄μΌ νλλ°,
- turnOn() / turnOff() λ ꡬνλ λ©μλ
- μ»΄ν¨ν°λ λ ΈνΈλΆμ΄λ 곡ν΅μ΄λκΉ μ¬κΈ°μ κΈ°λ³Έ λμ μ 곡
β
μ¦, Computerλ
κ³΅ν΅ κΈ°λ₯(μ μ on/off)μ μ 곡 + λ°λμ νμν κΈ°λ₯(display/typing)μ ꡬνμ κ°μ νλ “λΌλ”μΌ.
3) μ DeskTopμ μΌλ° ν΄λμ€κ³ NoteBookμ μΆμ ν΄λμ€μΌ?
(1) DeskTopμ “μΆμ λ©μλ 2κ°λ₯Ό μ λΆ κ΅¬ν”νμ → μμ±ν β

- display() + typing() λ λ€ κ΅¬ννμΌλ μ΄μ κ°μ²΄ μμ± κ°λ₯
- new DeskTop() β
(2) NoteBookμ “μΆμ λ©μλ 2κ° μ€ 1κ°λ§ ꡬν”νμ → μμ§ λ°μ ν β

- Computerκ° μꡬν μΆμλ©μλκ° 2κ°μμ§? (display, typing)
- NoteBookμ΄ display()λ§ κ΅¬ννκ³ typing()μ μ νμ΄.
- κ·Έλ¬λ©΄ NoteBookμ μμ§ “μμ±ν”μ΄ μλλ―λ‘ μκΈ° μμ λ μΆμν΄λμ€κ° λμ΄μΌ ν¨
- κ·Έλμ abstract class NoteBook μ΄ λλ κ±°μΌ.
(3) MyNoteBookμ΄ μ΅μ’ μμ±ν β

- NoteBookμ΄ λͺ» λλΈ typing()μ MyNoteBookμ΄ κ΅¬νν΄μ
- μ΄μ μΆμ λ©μλκ° μ λΆ κ΅¬ν μλ£
- κ·Έλμ new MyNoteBook() β κ°λ₯
4) μ new Computer(), new NoteBook()μ΄ μ λλμ§ (λμ ν μ€νΈ μ½λ)

β μ€μν ν¬μΈνΈ
- Computer c2 = new DeskTop(); μ²λΌ νμ μ λΆλͺ¨(Computer)λ‘ μ‘κ³
- μ€μ κ°μ²΄λ μμ(DeskTop / MyNoteBook) μΌλ‘ λ§λ€ μ μμ΄.
- μ΄κ² λ°λ‘ λ€νμ±μ΄κ³ , μΆμν΄λμ€μ κ°μ₯ ν° μ‘΄μ¬ μ΄μ μ€ νλμΌ.
5) μΆμν΄λμ€λ₯Ό μ μ°λκ°? (μ§μ§ μ΄μ )
β 3κ°μ§ μ΄μ λ§ κΈ°μ΅νλ©΄ λΌ
- κ³΅ν΅ μ½λ μ¬μ¬μ©
- turnOn(), turnOff() κ°μ 건 λΆλͺ¨μμ ν λ²λ§ ꡬν
- κ·μΉ κ°μ
- “μ»΄ν¨ν°λΌλ©΄ display, typingμ 무쑰건 ꡬνν΄λΌ”
- μ΄ κ°μ κ° μμΌλ©΄ μ΄λ€ ν΄λμ€λ typingμ λΉΌλ¨Ήκ³ λ μ»΄νμΌμ΄ λ μ μμ
- λ€νμ± μ€κ³
- Computer νμ νλλ‘ DeskTop, MyNoteBookμ λκ°μ΄ λ€λ£¨κ² λ§λ€κΈ°

Java μΆμν΄λμ€ + final + ν νλ¦Ώ λ©μλ ν¨ν΄: Player Level μμ€ν μΌλ‘ μ΄ν΄νκΈ°

κ²μμμ “λ 벨”μ΄ λ°λλ©΄ κ°λ₯ν νλμ΄ λ¬λΌμ§λ€.
- μ΄λ³΄μ: λ¬λ¦¬κΈ°(run) κ°λ₯
- μ€κΈμ: λ¬λ¦¬κΈ°(run) + μ ν(jump) κ°λ₯
- κ³ κΈμ: λ¬λ¦¬κΈ°(run) + μ ν(jump) + νμ (turn) κ°λ₯
νμ§λ§ μ€μν 건,
λ λ²¨μ΄ λ¬λΌλ “νλ μ΄ νλ¦(go)” μ체λ νμ μΌμ νλ€λ μ μ΄λ€.
μλ₯Ό λ€μ΄ go(count)λ νμ μλ μλ리μ€λ₯Ό λ°λ₯Έλ€:
- run 1λ²
- jumpλ₯Ό countλ²
- turn 1λ²
μ΄μ²λΌ μ€ν μμ(μλ리μ€)λ κ³ μ νκ³ ,
κ° νλμ λ΄μ©λ§ λ 벨μ λ°λΌ λ°κΎΈλ λ°©μμ΄ λ°λ‘ ν
νλ¦Ώ λ©μλ ν¨ν΄μ΄λ€.
1) μ 체 ꡬ쑰 ν λμ 보기
ν΅μ¬ ν΄λμ€ κ΄κ³
- PlayerLevel : λ 벨λ€μ κ³΅ν΅ κ·μΉ(μΆμν΄λμ€)
- BeginnerLevel / AdvancedLevel / SuperLevel : λ λ²¨λ³ κ΅¬ν체
- Player : νμ¬ λ 벨μ λ€κ³ μκ³ , λ 벨μ κ΅μ²΄ν μ μμ
- PlayBoard : μ€ν ν μ€νΈ(λ 벨 μ νλ©΄μ play)
2) “ν νλ¦Ώ λ©μλ”λ?
ν νλ¦Ώ λ©μλλ
“μ 체 μ€ν μμλ κ³ μ ν΄λκ³ (final), λ΄λΆ λ¨κ³(μΆμ λ©μλ)λ§ νμ ν΄λμ€μμ ꡬννκ² νλ λ©μλ”λ€.
μ¦,
- go()λ “νλ¦/μλ리쀔λ₯Ό μ μνλ€. → λ°κΎΈλ©΄ μ λ¨ → final
- run/jump/turnμ λ 벨λ§λ€ λ¬λΌμ§λ λμμ΄λ€. → νμ ν΄λμ€κ° ꡬν
3) BeginnerLevel μ½λκ° μλ―Ένλ κ²
λκ° μ¬λ¦° μ΄λ³΄μ λ 벨μ λ€μμ ꡬννλ€:

ν¬μΈνΈ
- μ΄λ³΄μλ runμ κ°λ₯
- jump/turnμ “κΈ°λ₯μ΄ μμ” λ©μμ§λ‘ λ체
- λ 벨 μλ΄ λ©μμ§λ₯Ό μΆλ ₯
β μ¦, “κΈ°λ₯μ λͺ» νλ©΄ μμΈλ‘ μ£½μ΄λ κ² μλλΌ μλ΄ λ©μμ§λ‘ μ²λ¦¬”νλ μ€κ³λ€.
4) Player ν΄λμ€: “λ 벨μ κ°μλΌμ°λ 본체”

μ¬κΈ°μ μ€μν μ 2κ°
(1) Playerλ “λ 벨 νλ”μ μ§μ ꡬννμ§ μλλ€
- run/jump/turnμ Playerκ° μ§μ κ°κ³ μμΌλ©΄ λ λ²¨μ΄ λμ΄λ λλ§λ€ Playerκ° λΉλν΄μ§λ€.
- κ·Έλμ λ λ²¨λ³ λμμ PlayerLevel νμ ν΄λμ€μ μμνλ€.
(2) upgradeLevel()λ‘ “νλ μΈνΈ”λ₯Ό ν΅μ§Έλ‘ κ΅μ²΄
- λ λ²¨μ΄ λ°λλ€λ 건, Playerκ° λ€κ³ μλ level κ°μ²΄κ° λ°λλ€λ μλ―Έ
- μ¦, λ΄λΆ μ λ΅(λμ κ·μΉ)μ κ°μλΌμ°λ λ°©μμ΄λΌμ
- μ€κ³ κ΄μ μμλ Strategy/State ν¨ν΄ λλλ ν¨κ» κ°μ§λ€.
5) PlayBoard(μ€ν μ½λ) νλ¦ ν΄μ

μ€ν μλ리μ€
- Player μμ± → κΈ°λ³Έ λ 벨 BeginnerLevel μΈν
- BeginnerLevelλ‘ go(1) μ€ν
- AdvancedLevelλ‘ κ΅μ²΄ → go(2) μ€ν
- SuperLevelλ‘ κ΅μ²΄ → go(3) μ€ν
β
Playerλ play(count)λ§ νΈμΆνμ§λ§
μ€μ νλ(μΆλ ₯)μ “νμ¬ level κ°μ²΄”κ° κ²°μ νλ€.
→ μ΄κ²μ΄ **λ€νμ±(polymorphism)**μ ν΅μ¬μ΄λ€.
6) go(count)κ° μ “final”μ΄μ΄μΌ ν κΉ?
go()λ “κ²μ κ·μΉ(μλ리μ€)” κ·Έ μ체λ€.
μλ₯Ό λ€μ΄ λκ΅°κ°κ° κ³ κΈ λ 벨μμ go()λ₯Ό λ§μλλ‘ λ°κΎΈλ©΄?
- runμ μ νκ³ jumpλΆν° νλ€κ±°λ
- turnμ λΉΌλ¨Ήκ±°λ
- jump νμ κ·μΉμ λ°κΏλ²λ¦¬λ©΄
κ²μμ λ 벨 μμ€ν κ·μΉμ΄ κΉ¨μ§λ€.
κ·Έλμ λ³΄ν΅ PlayerLevelμμ
- go()λ finalλ‘ κ³ μ
- run/jump/turnλ§ λ°κΎΈκ² μ€κ³νλ€
κ²°λ‘ : “μμ(λ£°)λ κ³ μ , λ΄μ©(νλ)μ λ³κ²½” κ΅¬μ‘°κ° ν νλ¦Ώ λ©μλ ν¨ν΄μ΄λ€.
7) μ΄ μ€κ³μ μ₯μ
β 1) νμ₯μ κ°ν¨
μ λ 벨 MasterLevelμ μΆκ°νλ €λ©΄?
- PlayerLevelμ μμλ°μ run/jump/turn/showLevelMessageλ§ κ΅¬ννλ©΄ λ
- Player μ½λλ λ°κΏ νμ μμ
β 2) μ€λ³΅ μ κ±°
λͺ¨λ λ 벨μμ “go ν릔μ λκ°μ΄ μ°λκΉ
- run → jump(countλ²) → turn
μ΄ μλ리μ€λ₯Ό ν κ³³μλ§ λλ€.
β 3) κ·μΉ κ°μ
λ 벨 ν΄λμ€λ λ°λμ run/jump/turnμ ꡬννκ² λλ€.
(μΆμλ©μλ κ°μ )
8) μ΄ μμ κ° λμμ 보μ¬μ£Όλ κ°λ μμ½
- μΆμν΄λμ€(abstract class): κ³΅ν΅ κ·μΉ(λ©μλ μκ·Έλμ²) κ°μ + μΌλΆ κ³΅ν΅ κ΅¬ν μ 곡
- λ€νμ±(Polymorphism): level.go() νΈμΆν΄λ μ€μ λμμ λ 벨 κ°μ²΄κ° κ²°μ
- final λ©μλ: μ€ν μμ(λ£°)λ₯Ό νμ ν΄λμ€κ° λͺ» λ°κΎΈκ² λ§μ
- ν νλ¦Ώ λ©μλ ν¨ν΄: “κ³ μ λ μ€ν μμ + λ³κ²½ κ°λ₯ν λ¨κ³ λ©μλ”
'π©βπ»Developer π‘ > πΎBack-endποΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| Java μμΈ μ²λ¦¬ (0) | 2026.02.11 |
|---|---|
| Java 8. Interface (0) | 2026.02.10 |
| JAVA : μμ (0) | 2026.02.10 |
| Java μμ:λ©μλ μ€λ²λΌμ΄λ© (0) | 2026.02.09 |
| JavaκΈ°μ΄ : ν΄λμ€ (1) | 2026.02.06 |