
์ธํฐํ์ด์ค๋ ๊ตฌํ์ฝ๋๋ ๋ฉค๋ฒ๋ณ์๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ ์ธํฐํ์ด์ค์ ์ด๋ฆ์ด ๊ฐ์ ๋ฉ์๋๊ฐ ์ ์ธ๋์๋ค๊ณ ํด๋ ๊ตฌํ์ ํด๋์ค์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก, ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ๋์ง ๋ชจํธํ์ง ์๋ค.
๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ Customerํด๋์ค๋ Buyํ ์ด๊ธฐ๋ํ๊ณ , Sellํ์ด๊ธฐ๋ ํ๋ค.


“Buyํ์ด์ Sellํ์ด๋ค” = Customer๋ ๋ ์ญํ ์ ๋ค ๊ฐ์ง๋ค
Customer ๊ฐ์ฒด๋ ์ด๋ฐ ๋๋์ด์ผ:
- **ํ ์ฌ๋(๊ฐ์ฒด)**์ด
- “๊ตฌ๋งค์ ์ญํ (Buy)”๋ ํ ์ ์๊ณ
- “ํ๋งค์ ์ญํ (Sell)”๋ ํ ์ ์์
๊ทธ๋์ ์๋๊ฐ ๊ฐ๋ฅํด:

์ Buy buyer = customer; ํ๋ฉด buy๋ง ํธ์ถ ๊ฐ๋ฅํด?
์ฌ๊ธฐ๊ฐ ํ๋ฉด์ ํต์ฌ ๋ฌธ์ฅ์ด์ผ:
“customer๋ฅผ Buy ์ธํฐํ์ด์ค ํ ๋ณ์์ ๋์ ํ๋ฉด
ํ๋ณํ์ด ์ผ์ด๋ Buy ์ธํฐํ์ด์ค์ ์ ์ธํ ๋ฉ์๋๋ง ํธ์ถํ ์ ์์ต๋๋ค.”
์ฆ, ๊ฐ์ฒด๋ ๊ทธ๋๋ก Customer์ธ๋ฐ,
๋ณ์ ํ์
์ Buy๋ก ์ก๋ ์๊ฐ “Buy ๊ด์ ์ผ๋ก๋ง” ๋ณด๊ฒ ๋ผ์,

โ ์ค์ํ ํฌ์ธํธ:
- “์คํ๋๋ ๋ฉ์๋”๋ ์ค์ ๊ฐ์ฒด(Customer)๊ฐ ๊ฐ์ง ๊ตฌํ์ด ์คํ๋ผ. (๋์ ๋ฐ์ธ๋ฉ)
- ํ์ง๋ง “์ฝ๋์์ ํธ์ถ ๊ฐ๋ฅํ ๋ฉ์๋ ๋ชฉ๋ก”์ **์ฐธ์กฐ ๋ณ์ ํ์ (Buy/Sell)**์ด ๊ฒฐ์ ํด.
[Java] ์ธํฐํ์ด์ค(Interface) — ๊ท์ฝ/๋คํ์ฑ/default·static/๋ค์ค๊ตฌํ + ์ค์ต(Scheduler, Sort)
์ค๋ ๋ฒ์ ํต์ฌ์ ํ ๋ฌธ์ฅ์ผ๋ก ๋๋์.
“์ธํฐํ์ด์ค๋ ‘ํ ์ ์๋ ๊ธฐ๋ฅ(๋ฉ์๋)’์ ๊ท์ฝ์ด๊ณ , ๊ตฌํ ํด๋์ค๊ฐ ๋ฐ๋์ด๋ ๊ฐ์ ํ์ ์ผ๋ก ํต์ผํด์(๋คํ์ฑ) ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ๋ง๋ ๋ค.”
๋ชฉ์ฐจ
- ์ธํฐํ์ด์ค๋?
- implements๋ก ๊ตฌํํ๊ธฐ (MemberService ์์)
- ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ฐ๋ ์ด์ = ๋คํ์ฑ
- ์ธํฐํ์ด์ค ๋ฉค๋ฒ ํน์ง(๋ณ์/๋ฉ์๋)
- Calc ์์ ๋ก ๋ณด๋ ๊ตฌ์กฐ(์ธํฐํ์ด์ค + ์ถ์ํด๋์ค + ๊ตฌํํด๋์ค)
- ๋ํดํธ ๋ฉ์๋(default)
- ์ ์ ๋ฉ์๋(static)
- ์ธํฐํ์ด์ค ๋ค์ค ๊ตฌํ + ํ๋ณํ(์ ์บ์คํ ) ์ ํ (Buy/Sell ์์)
- ์ธํฐํ์ด์ค ์์ = ํ ์์(type inheritance)
- ์ค์ต 1) ๊ณ ๊ฐ์ผํฐ ์๋ด ๋ฐฐ๋ถ ์ ์ฑ (Scheduler)
- ์ค์ต 1-์ถ๊ฐ ๊ณผ์ ) AgentGetCall ์ ์ฑ ์ถ๊ฐ
- ์ค์ต 2) Sort ์ธํฐํ์ด์ค๋ก ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ ํ๋ก๊ทธ๋จ (๋ ์ฝ๋ ํด์ค ํฌํจ)
- ๋ง๋ฌด๋ฆฌ ์์ฝ
1) ์ธํฐํ์ด์ค๋?
- ์ธํฐํ์ด์ค๋ **ํด๋์ค์ ๊ท์ฝ(์ฝ์)**์ด์์.
- “์ด ๊ธฐ๋ฅ๋ค์ ๋ฐ๋์ ์ ๊ณตํด์ผ ํ๋ค”๋ฅผ ๋ฉ์๋๋ก ์ ํํด์,
๊ตฌํ ํด๋์ค๊ฐ ๋ค์ํด์ ธ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
2) implements๋ก ๊ตฌํํ๊ธฐ (MemberService ์์)
(1) ์ธํฐํ์ด์ค ์ ์ธ
์ธํฐํ์ด์ค๋ ๋ฉ์๋ “ํ”์ ๋ง๋ค๊ณ :

(2) ๊ตฌํ ํด๋์ค์์ implements
๊ตฌํ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค.

3) ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ฐ๋ ์ด์ = ๋คํ์ฑ(Polymorphism)
๊ตฌํ์ด ๋๋ ๋ค์๋ ๋ณดํต ์ด๋ ๊ฒ ์๋๋ค:

๊ทธ๋ฆฌ๊ณ MemberServiceImpl2, MemberServiceImpl3์ฒ๋ผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ๋ ์๊ฒจ๋:

โ ํต์ฌ ์ฅ์
- ์ฝ๋๊ฐ **MemberService(๊ท์ฝ)**๋ง ๋ฐ๋ผ๋ณด๋๊น
- ๊ตฌํ์ฒด๊ฐ ๋ฐ๋์ด๋(Impl ๊ต์ฒด) ํธ์ถ ์ฝ๋๋ ๊ฑฐ์ ์ ๋ฐ๋
- ์ด๊ฒ “์ฌ๋ฌ ํด๋์ค๋ฅผ ํ๋์ ํ์ ์ผ๋ก ์ฒ๋ฆฌ”ํ๋ ๋คํ์ฑ์ด์์.
4) ์ธํฐํ์ด์ค ๋ฉค๋ฒ ํน์ง(๋ณ์/๋ฉ์๋)
(1) ์ธํฐํ์ด์ค์ ๋ณ์ = ์๋์ผ๋ก ์์
์ธํฐํ์ด์ค์ ์ ์ธํ ๋ณ์๋ ์ปดํ์ผ ๊ณผ์ ์์ ๊ฐ์ด ๋ณํ์ง ์๋ ์์๋ก ์ทจ๊ธ๋ฉ๋๋ค.
์ฆ, ์ฑ๊ฒฉ์ด public static final์ ๊ฐ๊น์์.
(2) ์ธํฐํ์ด์ค์ ๋ฉ์๋ = ์๋์ผ๋ก ์ถ์ ๋ฉ์๋
์ธํฐํ์ด์ค์ ์ ์ธํ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ ์ฝ๋๊ฐ ์๋ ์ถ์ ๋ฉ์๋์
๋๋ค.
public abstract๋ฅผ ์ ์จ๋ ๊ทธ๋ ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
5) Calc ์์ ๋ก ๋ณด๋ ๊ตฌ์กฐ(์ธํฐํ์ด์ค + ์ถ์ํด๋์ค + ๊ตฌํํด๋์ค)
์ด ํํธ๊ฐ “์ธํฐํ์ด์ค ์ค๊ณ” ๊ฐ๊ฐ์ ์ก๊ธฐ์ ์ข์์.
(1) Calc ์ธํฐํ์ด์ค: ๊ท์ฝ(์์ + ์ถ์๋ฉ์๋)

(2) Calculator ์ถ์ ํด๋์ค: ์ผ๋ถ๋ง ๊ตฌํํ๊ณ ๋จ๊ฒจ๋๊ธฐ

โ ํฌ์ธํธ
- Calculator๋ ์ถ์ ํด๋์ค๋ผ์ new ๋ถ๊ฐ๋ฅ
- Calc๋ ์ถ์ ๋ฉ์๋๋ง ์์ผ๋ฉด ์ง์ new ๋ถ๊ฐ๋ฅ
- “์์ฑ๋ ๊ตฌํ ํด๋์ค”๋ง new ๊ฐ๋ฅ
(3) CompleteCalc ๊ตฌํ ํด๋์ค: ์ต์ข ์์ฑ(์ธ์คํด์ค ์์ฑ ๊ฐ๋ฅ)

6) ๋ํดํธ ๋ฉ์๋(default)
(1) ๋ํดํธ ๋ฉ์๋๋?
- ์ธํฐํ์ด์ค์ธ๋ฐ๋ ๊ตฌํ ์ฝ๋๊ฐ ๋ค์ด์๋ ๋ฉ์๋
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ์๊ธฐ๋ฉด ๊ทธ ํด๋์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ด์.
์์(์ธํฐํ์ด์ค ์์ ๊ธฐ๋ณธ ๋์ ์ ๊ณต):

(2) ์ ํ์ํด?
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ์ด๋ฏธ ๋ง์ ๋,
- ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์ง๋ง ๊ตฌํ ํด๋์ค๋ค์ ์ ๋ถ ์์ ํ๊ธฐ ์ซ์ผ๋ฉด
→ default๋ก ๊ธฐ๋ณธ ๊ตฌํ์ ์ ๊ณตํ ์ ์์ด์.
7) ์ ์ ๋ฉ์๋(static) — ์ธํฐํ์ด์ค ์ ํธ ๊ธฐ๋ฅ
์ธํฐํ์ด์ค์๋ static ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์์ด์.
์ด๊ฑด ๋ณดํต “๋์ ํจ์(์ ํธ)”๋ก ์๋๋ค.
์: ๋ฐฐ์ด ํฉ ๊ตฌํ๋ total() ๊ฐ์ ๊ฒ.

ํธ์ถ์ ์ธํฐํ์ด์ค ์ด๋ฆ์ผ๋ก ์ง์ :

8) ์ธํฐํ์ด์ค ๋ค์ค ๊ตฌํ + ํ๋ณํ(์ ์บ์คํ ) ์ ํ (Buy/Sell ์์)
(1) ์ ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ ๊ฐ ๊ตฌํ ๊ฐ๋ฅ?
- “ํด๋์ค ๋ค์ค ์์”์ ๋ฉ์๋ ํธ์ถ์ด ๋ชจํธํด์ง ์ ์์ด์ ์ ํ์ด ๋ง์ง๋ง,
- ์ธํฐํ์ด์ค๋ ๋ณดํต ๊ตฌํ ์ฝ๋/๋ฉค๋ฒ๋ณ์๊ฐ ์์ด์
์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ๊ตฌํํด๋ ์ถฉ๋์ด ๋ํฉ๋๋ค.
(2) Buy, Sell์ ๋์์ ๊ตฌํํ Customer

(3) “Customer๋ Buyํ์ด์ Sellํ”
์ด๊ฒ ์ง์ง ํต์ฌ์ด์์:

โ ์ ๋ฆฌ
- ๊ฐ์ฒด๋ ๊ทธ๋๋ก Customer์ธ๋ฐ
- ์ฐธ์กฐ ๋ณ์ ํ์ ์ด Buy๋ Sell์ด๋์ ๋ฐ๋ผ “ํธ์ถ ๊ฐ๋ฅํ ๋ฉ์๋ ๋ชฉ๋ก”์ด ๋ฌ๋ผ์ง
- ์ด๊ฒ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ์ค๊ณ์ “์์ ํ ์ ํ”์ด์์.
9) ์ธํฐํ์ด์ค ์์ = ํ ์์(type inheritance)
- ์ธํฐํ์ด์ค๋ผ๋ฆฌ๋ ์์(extends)์ด ๊ฐ๋ฅํด์.
- ๋ค๋ง ํด๋์ค ์์์ฒ๋ผ “๊ตฌํ ์ฝ๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ์์”์ด ์๋๋ผ
ํ์ (๊ท์ฝ)์ ๋ฌผ๋ ค๋ฐ๋ ์์์ด๋ผ์ **ํ ์์(type inheritance)**๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. - ํด๋์ค๋ ์์์ 1๊ฐ๋ง ๊ฐ๋ฅํ์ง๋ง, ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ ๊ฐ ๋์ ์์๋ ๊ฐ๋ฅํด์.
10) ์ค์ต 1) ๊ณ ๊ฐ์ผํฐ ์๋ด ๋ฐฐ๋ถ ์ ์ฑ (Scheduler)
์ํฉ
- ๊ณ ๊ฐ์ผํฐ๋ก ์ ํ๊ฐ ์ค๋ฉด ๋๊ธฐ์ด์ ์ ์ฅ๋๊ณ ,
- ์๋ด์์๊ฒ ๋ฐฐ๋ถํ๋ “์ ์ฑ ”์ด ์ฌ๋ฌ ๊ฐ์ง์ผ ์ ์๋ค.
์ ์ฑ ์์ 3๊ฐ์ง:
- ์์๋๋ก ๋ฐฐ๋ถ(๋ชจ๋ ์๋ด์์ด ๋์ผํ๊ฒ ์ฒ๋ฆฌ)
- ๊ฐ์ฅ ์งง์ ๋๊ธฐ์ด/์ฌ๋ ์๋ด์์๊ฒ ๋ฐฐ๋ถ
- ๊ณ ๊ฐ ๋ฑ๊ธ(์ฐ์ ์์) ๊ธฐ๋ฐ ๋ฐฐ๋ถ
Scheduler ์ธํฐํ์ด์ค

๊ตฌํ์ฒด ์์ (RoundRobin / LeastJob / PriorityAllocation)
๊ฐ ํด๋์ค๋ ์ ์ฑ ์ ๋ง๊ฒ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ๊ตฌํํฉ๋๋ค.
ํ ์คํธ(SchedulerTest)
์คํ ์ ์ ๋ ฅ:
- R → RoundRobin
- L → LeastJob
- P → PriorityAllocation
์ ํ๋ ๊ตฌํ์ฒด๋ก ์๋ ๋ ๋ฉ์๋ ํธ์ถ:
โ ์ฌ๊ธฐ์ ์ธํฐํ์ด์ค์ ๋ง
- Scheduler scheduler ํ๋๋ก ํต์ผํด๋๊ณ
- ์ ๋ ฅ์ ๋ฐ๋ผ ๊ตฌํ์ฒด๋ง ๊ฐ์๋ผ์ฐ๋ ๊ตฌ์กฐ → ์ ์ฑ ์ถ๊ฐ/๋ณ๊ฒฝ์ด ์ฌ์
11) ์ค์ต 1-์ถ๊ฐ ๊ณผ์ ) AgentGetCall ์ ์ฑ ์ถ๊ฐ
์ฑ ์์ ์ถ๊ฐ๋ก ์๊ตฌํ๋ ๊ณผ์ ๋ ์ด๊ฑฐ์์:
- “์ ํ๋ฅผ ํ ๋นํ๋ ๋ฐฉ์”์ด ์๋๋ผ
์๋ด์์ด ํ์ํ ๋ ์ค์ค๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ถ๊ฐํ๋ค.
์๊ตฌ ์ถ๋ ฅ:
- getNextCall() ํธ์ถ → “์๋ด์์ด ๋ค์ ์ ํ ์์ฒญ”
- sendCallToAgent() ํธ์ถ → “์๋ด์์ด ์ ํ ์๋ด์ ๊ฐ์ ธ๊ฐ์ต๋๋ค”
- SchedulerTest์์ A ๋๋ a ์ ๋ ฅํ๋ฉด ์ ํ๋๋๋ก
์ฆ, AgentGetCall๋ Scheduler๋ฅผ ๊ตฌํํ๋๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
12) ์ค์ต 2) Sort ์ธํฐํ์ด์ค๋ก ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ ํ๋ก๊ทธ๋จ (๋ ์ฝ๋ ํด์ค)
์ฑ ์๊ตฌ์ฌํญ ์ ๋ฆฌ:
- Sort ์ธํฐํ์ด์ค์๋
- ascending(int[] arr) (์ค๋ฆ์ฐจ์)
- descending(int[] arr) (๋ด๋ฆผ์ฐจ์)
- ์๊ณ ๋ฆฌ์ฆ ์ค๋ช ์ description() ๋ํดํธ ๋ฉ์๋๋ก ์ ๊ณต
- ๊ตฌํ ํด๋์ค 3๊ฐ: QuickSort, HeapSort, BubbleSort
- ์ค์ ์ ๋ ฌ์ ํ์ง ์๊ณ ์ค๋ช ๋ง ์ถ๋ ฅํด๋ ๋จ
- ์ฌ์ฉ์ ์
๋ ฅ:
- H → HeapSort
- Q → QuickSort
- B → BubbleSort
13) ๋ค ์ฝ๋๊ฐ ์ “์ธํฐํ์ด์ค ๊ต๊ณผ์ ๊ตฌ์กฐ”์ธ์ง
๋ค๊ฐ ์ฌ๋ฆฐ ์ฝ๋ ํต์ฌ์ ๋ฑ ์ด ๊ตฌ์กฐ์์:
1. ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ํต์ผ


3. ๊ทธ ์ดํ๋ ๊ตฌํ์ฒด๊ฐ ๋ญ๋ ๋์ผ ํธ์ถ

โ ์ด๊ฒ ๋ฐ๋ก ๋คํ์ฑ์ ํต์ฌ
- “๋ฌด์จ ์ ๋ ฌ์ด๋”๋ ๋ฐ๊นฅ์์ ์ ํํ๊ณ
- “์ ๋ ฌ ์ํ”์ Sort ๊ท์ฝ๋๋ก๋ง ํธ์ถํ๋ค
→ ๊ตฌํ์ฒด๊ฐ ๋ฐ๋์ด๋ ํธ์ถ๋ถ๋ ๊ทธ๋๋ก
'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| JAVA ์ปฌ๋ ์ ์๋ฃ๊ตฌ์กฐ (0) | 2026.02.11 |
|---|---|
| Java ์์ธ ์ฒ๋ฆฌ (0) | 2026.02.11 |
| JAVA : ์์ (0) | 2026.02.10 |
| Java ์์:๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ (0) | 2026.02.09 |
| JAVA : ์์ (2) | 2026.02.09 |