2024-09-08 22:33:26
๋ฐ˜์‘ํ˜•

์ž ์˜ค๋Š˜์€ ์ €๋ฒˆ์— ๊ณต๋ถ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์œ ์˜๋ฏธํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ ์งœ๋ณผ ๊ฒƒ์ด๋‹ค.

 

์–ด๋–ค ์ฝ”๋“œ์ธ์ง€ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์ž.

 

์šฐ์„  ๋จผ์ € ์„ค๋ช…์„ ํ•ด๋ณด์ž๋ฉด Payment๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”

ํด๋ž˜์Šค ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ ๋‹ค. CardPayment์™€ CashPayment ๋กœ ๊ฐ๊ฐ ์นด๋“œ๊ณ„์‚ฐ๊ณผ ํ˜„๊ธˆ๊ณ„์‚ฐ์„ ์˜๋ฏธํ•˜๋Š”

ํด๋ž˜์Šค์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ๋ฉ”์ธ๋ฉ”์†Œ๋“œ์— ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง€๋ถˆ์„ ํ• ๊ฒƒ์ธ์ง€ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ 

๊ทธ ๋ฐฉ์‹์— ๋”ฐ๋ผ 000์› ์นด๋“œ ๊ฒฐ์ œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค์™€ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ๋จผ์ € ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ์„ ๋จผ์ € ๋ณด์ž.

 

์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ

Payment ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

public abstract void pay(double amount); ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋‹ค.

์ถ”์ƒ๋ฉ”์†Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฌด์กฐ๊ฑด ์žฌ์ •์˜ ํ•ด์•ผํ•œ๋‹ค.

parameter๋กœ๋Š” double ํ˜•์œผ๋กœ amount ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ณ  ์žˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ณด์ž.

 

CardPayment
CashPayment

๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ณด๋ฉด ๋‘˜๋‹ค Paytment ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ์— ๋งž๊ฒŒ ์ƒˆ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋ฆ„์€ pay๋กœ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค

(์ฆ‰, ์ˆ˜ํ‘œ๊ณ„์‚ฐ์ด๋“  ๋ญ๋“  ์ƒˆ๋กœ์šด ๊ฒฐ์ œ์ˆ˜๋‹จ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ์— ์šฉ์ดํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.)

 

๋ฉ”์ธ๋ฉ”์†Œ๋“œ

์‚ฌ์‹ค ์—ฌ๊ธฐ๋ถ€๋ถ„์ด ์ €๋ฒˆ ์˜ˆ์ œ์™€ ์ข€ ๋‹ค๋ฅธ ์ ์ธ๋ฐ ์ž˜ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

 

ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค๋ช…์„ ์ž์„ธํ•˜๊ฒŒ ํ•ด๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

static void getPay(Payment payment) {

           payment.pay(100);

๋ถ€๋ถ„์€ static์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒดํ™” ์—†์ด ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์™œ ๊ฐ์ฒดํ™”๋ฅผ ์•ˆํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ƒ?

getPay ๋ฉ”์†Œ๋“œ๋Š” Payment ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ๋งŒ ํ•˜๋Š” ์ง•๊ฒ€๋‹ค๋ฆฌ์˜ ์—ญํ• ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๊ตณ์ด ๊ฐ์ฒดํ™”๋ฅผ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ๊ฐ’๋งŒ ์กฐ๋‹ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜ Payment payment๋Š” ๋ฌด์—‡์ด๋ƒ?

 

์•„๋ž˜ ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด payment๋Š” new CardPayment()์ด๊ฑฐ๋‚˜ new CashPayment()์ด๋‹ค.

์ด ๋œป์€ ์ฆ‰ ๊ฐ์ฒดํ™”๋ฅผ ํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ Payement payment = new CardPayment() ํ˜น์€

Payment payment = new CashPayment()๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ฒฐ๊ตญ์€ ์ƒ์œ„ํƒ€์ž…์ด๊ธฐ์—

์ด ๊ณผ์ •์—์„œ ์—…์บ์ŠคํŒ…์ด ์ผ์–ด๋‚œ๋‹ค.

 

์—…์บ์ŠคํŒ…์ด ์ผ์–ด๋‚œ ์ƒํƒœ์—์„œ ์ด ๊ฐ’์„ pay๋ฉ”์†Œ๋“œ์— 100์ด๋ผ๋Š” ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” pay ๋ฉ”์†Œ๋“œ๊ฐ€ ์žฌ์ •์˜ ๋œ ๋ฉ”์†Œ๋“œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค.

 

์žฌ์ •์˜ ๋œ ๋ฉ”์†Œ๋“œ๋Š” ์—…์บ์ŠคํŒ…์ด ๋˜์—ˆ๋”๋ผ๋„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ”๋กœ ์žฌ์ •์˜ ๋œ ๊ฐ๊ฐ์ด ๊ฐ’์œผ๋กœ!!

๋”ฐ๋ผ์„œ Payment ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์žฌ์ •์˜ ๋œ pay๋ฉ”์†Œ๋“œ๋กœ ๊ฐ๊ฐ ๊ฐ’์ด ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ฒฐ๋ก !!

1. getPay์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— new ~~์ด ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ๊ฐ์ฒดํ™”์ž„.

2. getPay ๋งค๊ฐœ๋ณ€์ˆ˜ Payment payment๋ฅผ ๋ฐ›์€ ๊ฐ’ 100์ด ์ €์žฅ์ด ๋จ

3. ์—…์บ์ŠคํŒ…์ด ์ผ์–ด๋‚œ ์ƒํ™ฉ์ด ๋˜์–ด๋ฒ„๋ฆฌ๋ฉด์„œ CardPayment์˜ ์žฌ์ •์˜ ๋œ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ๋จ

4. CardPayment.pay(100);์ด ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ๊ณผ ๊ฐ™์•„์ง

5. static๋ฉ”์†Œ๋“œ์ด๋ฏ€๋กœ Intertest.getPay();๋กœ ๊ฐ์ฒดํ™” ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ

 

๊ฒฐ๊ณผ ์ฝ˜์†”์ฐฝ

์•ฝ๊ฐ„ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์ดํ•ดํ•˜๋ฉด ์‰ฌ์šด ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

์—…์บ์ŠคํŒ…์ด ๋‹น์—ฐํ•˜๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉ๋œ ๊ฒƒ์„ ๋น ๋ฅด๊ฒŒ ๋ˆˆ์น˜์ฑŒ ์ˆ˜ ์žˆ์–ด์•ผํ•˜๋Š” ๊ฒƒ์ด

ํฌ์ธํŠธ๋‹ค.

 

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€

 

728x90