๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ Chapter 14: ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ

  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ์„ค๊ณ„๊ฐ€ ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ํฐ ์ด์ต์€ ์ฝ”๋“œ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์‚ฌํ•œ ํ˜‘๋ ฅ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ผ.

๐Ÿ“š ํ•ธ๋“œํฐ ๊ณผ๊ธˆ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝํ•˜๊ธฐโ€‹

  • ์˜ˆ์ œ ์ƒ๋žต. ์ฑ… P471 ์ฐธ๊ณ 
  • ์„ค๋ช… ์ƒ๋žต
  • ๊ณ ์ •์š”๊ธˆ ๋ฐฉ์‹(FixedFeePolicy), ์‹œ๊ฐ„๋Œ€๋ณ„ ๋ฐฉ์‹(TimeOfDayDiscountPolicy), ์š”์ผ๋ณ„ ๋ฐฉ์‹(DayOfWeekDiscountPolicy), ๊ตฌ๊ฐ„๋ณ„ ๋ฐฉ์‹(DurationDiscountPolicy) ๋„ค ๊ฐ€์ง€๋กœ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ถ„๋ฅ˜
  • ๋น„์ผ๊ด€์„ฑ์€ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ๋ฐœ๋ชฉ์„ ์žก๋Š”๋‹ค. ํ•˜๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๊ณ , ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ธฐ์กด์˜ ๊ตฌํ˜„์„ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ์ƒˆ๋กœ์šด ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ฝ”๋“œ ์‚ฌ์ด์˜ ์ผ๊ด€์„ฑ์€ ์ ์  ๋” ์–ด๊ธ‹๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ผ๊ด€์„ฑ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ์ ์€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์ ์ด๋‹ค. ์œ ์‚ฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ผ ์žˆ๋‹ค๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์ด ์œ ์‚ฌํ•˜๋‹ค๋Š” ์‚ฌ์‹ค ์ž์ฒด๋„ ์˜์‹ฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ ๋•Œ๋ฌธ์— ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด ์‚ฌ์ด์˜ ํ˜‘๋ ฅ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ฟ์ด๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ฒซ๊ฑธ์Œ์€ ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“š ์„ค๊ณ„์— ์ผ๊ด€์„ฑ ๋ถ€์—ฌํ•˜๊ธฐโ€‹

  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ์„ค๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ์กฐ์–ธ์€ ๋‹ค์–‘ํ•œ ์„ค๊ณ„ ๊ฒฝํ—˜์„ ์ตํžˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์กฐ์–ธ์€ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋””์ž์ธ ํŒจํ„ด์„ ํ•™์Šตํ•˜๊ณ  ๋ณ€๊ฒฝ์ด๋ผ๋Š” ๋ฌธ๋งฅ ์•ˆ์—์„œ ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•ด ๋ณด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ง€์นจ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋œ๋‹ค.
    • ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐœ๋…์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๋ผ.
    • ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์„ ์บก์Šํ™”ํ•˜๋ผ.

๐ŸŽˆ ์กฐ๊ฑด ๋กœ์ง ๋Œ€ ๊ฐ์ฒด ํƒ์ƒ‰โ€‹

  • ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋ณ€๊ฒฝ์„ ๋‹ค๋ฃจ๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์€ ์กฐ๊ฑด ๋กœ์ง์„ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ด๋™์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.
public class Movie {
private DiscountPolicy discountPolicy;

// ํ˜„์žฌ์˜ ํ• ์ธ ์ •์ฑ…์ด ์–ด๋–ค ์ข…๋ฅ˜์ธ์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.
public Money calculateMovieFee(Screening screening) {
// ๋‹จ์ˆœํžˆ ํ˜„์žฌ์˜ ํ• ์ธ ์ •์ฑ…์„ ๋‚˜ํƒ€๋‚ด๋Š” discountPolicy์— ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋ฟ์ด๋‹ค.
// ํ• ์ธ ์ •์ฑ…์˜ ์ข…๋ฅ˜๋ฅผ ์ฒดํฌํ•˜๋˜ ์กฐ๊ฑด๋ฌธ์ด discountPolicy๋กœ์˜ ๊ฐ์ฒด ์ด๋™์œผ๋กœ ๋Œ€์ฒด๋œ ๊ฒƒ์ด๋‹ค.
return fee.minus(discountPolicy.calculateDiscountAmount(screening));
}
}
  • ๋‹คํ˜•์„ฑ์€ ๋ฐ”๋กœ ์ด๋Ÿฐ ์กฐ๊ฑด ๋กœ์ง์„ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ด๋™์œผ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์ด ์ œ๊ณตํ•˜๋Š” ์„ค๊ณ„ ๊ธฐ๋ฒ•์ด๋‹ค.
  • ๋‹จ์ˆœํžˆ ์ž์‹ ์˜ ์š”์ฒญ์„ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ค„ ๊ฒƒ์ด๋ผ ๋ฏฟ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋ฟ์ด๋‹ค.
  • ์‹ค์ œ๋กœ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ์ฃผ์ฒด๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋‹ค. ์ด ๊ฐ์ฒด๋“ค์€ ํ˜‘๋ ฅ์•ˆ์—์„œ discountPolicy๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ discountPolicy๋Š” ์„œ๋ธŒ ํƒ€์ž…์ด์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ๋ฟ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋Š” ์กฐ๊ฑด์„ ํŒ๋‹จํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์ง€ ๋‹ค์Œ ๊ฐ์ฒด๋กœ ์ด๋™ํ•  ๋ฟ์ด๋‹ค.
  • ์กฐ๊ฑด ๋กœ์ง์„ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ด๋™์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค๋‹ค๋ž€ ํด๋ž˜์Šค๋ฅผ ๋” ์ž‘์€ ํด๋ž˜์Šค๋“ค๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ๋ณ€๊ฒฝ์˜ ์ด์œ ์™€ ์ฃผ๊ธฐ๋‹ค. ํด๋ž˜์Šค๋Š” ๋ช…ํ™•ํžˆ ๋‹จ ํ•˜๋‚˜์˜ ์ด์œ ์— ์˜ํ•ด์„œ๋งŒ ๋ณ€๊ฒฝ๋ผ์•ผ ํ•˜๊ณ  ํด๋ž˜์Šค ์•ˆ์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋ผ์•ผ ํ•œ๋‹ค. ์ฆ‰, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ๋”ฐ๋ฅด๋„๋ก ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ํฐ ๋ฉ”์„œ๋“œ ์•ˆ์— ๋ญ‰์ณ์žˆ๋˜ ์กฐ๊ฑด ๋กœ์ง๋“ค์„ ๋ณ€๊ฒฝ์˜ ์••๋ ฅ์— ๋งž์ถฐ ์ž‘์€ ํด๋ž˜์Šค๋“ค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚˜๋ฉด ์ธ์Šคํ„ด์Šค๋“ค ์‚ฌ์ด์˜ ํ˜‘๋ ฅ ํŒจํ„ด์— ์ผ๊ด€์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ๋” ์‰ฌ์›Œ์ง„๋‹ค.
  • ์œ ์‚ฌํ•œ ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์€ ํด๋ž˜์Šค๋“ค์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ญํ• ์ด๋ผ๋Š” ์ถ”์ƒํ™”๋กœ ๋ฌถ์ด๊ฒŒ ๋˜๊ณ  ์—ญํ•  ์‚ฌ์ด์—์„œ ์ด๋ค„์ง€๋Š” ํ˜‘๋ ฅ ๋ฐฉ์‹์ด ์ „์ฒด ์„ค๊ณ„์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ด๋Œ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ์„ ์œ„ํ•œ ์ง€์นจ

  1. ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐœ๋…์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๋ผ.
  2. ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์„ ์บก์Šํ™”ํ•˜๋ผ.
  • ํ•ต์‹ฌ์€ ํ›Œ๋ฅญํ•œ ์ถ”์ƒํ™”๋ฅผ ์ฐพ์•„ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์˜์กด์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋Œ€์ฒด๊ฐ€๋Šฅํ•œ ์—ญํ• ๋กœ ๊ตฌ์„ฑ๋œ ํ˜‘๋ ฅ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์„ ํƒํ•˜๋Š” ์ถ”์ƒํ™”์˜ ํ’ˆ์งˆ์ด ์บก์Šํ™”์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์บก์Šํ™”์˜ ๊ด€์ ์—์„œ ์„ค๊ณ„๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉด ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ ํŒจํ„ด์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽˆ ์บก์Šํ™” ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ธฐโ€‹

  • ๋ฐ์ดํ„ฐ ์€๋‹‰์ด๋ž€ ์˜ค์ง ์™ธ๋ถ€์— ๊ณต๊ฐœ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œํ•œํ•จ์œผ๋กœ์จ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์ƒํƒœ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๋Š” ๊ธฐ๋ฒ•์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” private์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•˜๊ณ  ์˜ค์ง ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋งŒ์ด ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์บก์Šํ™”๋Š” ๋ฐ์ดํ„ฐ ์€๋‹‰ ์ด์ƒ์ด๋‹ค. GOF์˜ ์กฐ์–ธ์— ๋”ฐ๋ฅด๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ์•ˆ์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐœ๋…์„ ๊ฐ์ถ”๋Š” ๊ฒƒ์ด๋‹ค. ์บก์Šํ™”๋ž€ ๋ณ€ํ•˜๋Š” ์–ด๋–ค ๊ฒƒ์ด๋“  ๊ฐ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.
  • ์บก์Šํ™”์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” ๊ฐ์ฒด์˜ ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ฝ”๋“œ ์ˆ˜์ •์œผ๋กœ ์ธํ•œ ํŒŒ๊ธ‰ํšจ๊ณผ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋ฒ•์ด ์บก์Šํ™”์˜ ์ผ์ข…์ด๋‹ค. ๋ฐ์ดํ„ฐ ์บก์Šํ™”์™€ ๋ฉ”์„œ๋“œ ์บก์Šํ™”๋Š” ๊ฐœ๋ณ„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด ์บก์Šํ™”์™€ ์„œ๋ธŒํƒ€์ž… ์บก์Šํ™”๋Š” ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์„œ๋ธŒํƒ€์ž… ์บก์Šํ™”์™€ ๊ฐ์ฒด ์บก์Šํ™”๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ธŒํƒ€์ž… ์บก์Šํ™”๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ์ฒด ์บก์Šํ™”๋Š” ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•ด์„œ ํƒ€์ž… ๊ณ„์ธต์„ ๋งŒ๋“ ๋‹ค.
    • ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์˜ ๊ณตํ†ต์ ์ธ ํ–‰๋™์„ ์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”ํ•œ ํ›„ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์ด ์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์˜ ์„œ๋ธŒํƒ€์ž…์ด ๋œ๋‹ค.
  • ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์˜ ์ผ๋ถ€๋กœ ํƒ€์ž… ๊ณ„์ธต์„ ํ•ฉ์„ฑํ•œ๋‹ค.
    • ํƒ€์ž… ๊ณ„์ธต์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์— ํ•ฉ์„ฑํ•œ๋‹ค. ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ์‚ฌํ•ญ์— ๊ฒฐํ•ฉ๋ผ์„œ๋Š” ์•ˆ๋œ๋‹ค.
    • ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๊ฐ™์ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋Š์Šจํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด ์˜ค์ง ์ถ”์ƒํ™”์—๋งŒ ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

๐Ÿ“š ์ผ๊ด€์„ฑ ์žˆ๋Š” ๊ธฐ๋ณธ ์ •์ฑ… ๊ตฌํ˜„ํ•˜๊ธฐโ€‹

๐ŸŽˆ ๋ณ€๊ฒฝ ๋ถ„๋ฆฌํ•˜๊ธฐโ€‹

  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๋ณ€ํ•˜๋Š” ๊ฐœ๋…๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐœ๋…์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด ์˜ˆ์ œ์—์„œ ์‹œ๊ฐ„๋Œ€๋ณ„, ์š”์ผ๋ณ„, ๊ตฌ๊ฐ„๋ณ„ ๋ฐฉ์‹์˜ ๊ณตํ†ต์ ์€ ๊ฐ ๊ธฐ๋ณธ ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ์œ ์‚ฌํ•˜๋‹ค.
    • ๊ธฐ๋ณธ ์ •์ฑ…์€ ํ•œ ๊ฐœ ์ด์ƒ์˜ ๊ทœ์น™์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • ํ•˜๋‚˜์˜ ๊ทœ์น™์€ ์ ์šฉ์กฐ๊ฑด๊ณผ ๋‹จ์œ„์š”๊ธˆ์˜ ์กฐํ•ฉ์ด๋‹ค.
  • ๊ณตํ†ต์ ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด๊ณ , ์ฐจ์ด์ ์€ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ทœ์น™์œผ๋กœ๋ถ€ํ„ฐ ๋ณ€ํ•˜๋Š” ์ ์šฉ์กฐ๊ฑด์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

๐ŸŽˆ ๋ณ€๊ฒฝ ์บก์Šํ™”ํ•˜๊ธฐโ€‹

  • ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•ด์„œ ํŒŒ๊ธ‰ํšจ๊ณผ๋ฅผ ์ค„์—ฌ์•ผ ํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์œผ๋กœ๋ถ€ํ„ฐ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์˜ ๊ณตํ†ต์ ์„ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ๋„ ํฌํ•จํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ทœ์น™์ด๋‹ค. ๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์ ์šฉ์กฐ๊ฑด์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทœ์น™์œผ๋กœ๋ถ€ํ„ฐ ์ ์šฉ์กฐ๊ฑด์„ ๋ถ„๋ฆฌํ•ด์„œ ์ถ”์ƒํ™”ํ•œ ํ›„ ์‹œ๊ฐ„๋Œ€๋ณ„, ์š”์ผ๋ณ„, ๊ตฌ๊ฐ„๋ณ„ ๋ฐฉ์‹์„ ์ด ์ถ”์ƒํ™”์˜ ์„œ๋ธŒํƒ€์ž…์œผ๋กœ ๋งŒ๋“ ๋‹ค. ์ด๊ฒƒ์ด ์„œ๋ธŒํƒ€์ž…์˜ ์บก์Šํ™”๋‹ค. ๊ทธ ํ›„์— ๊ทœ์น™์ด ์ ์šฉ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•˜๋Š” ์ถ”์ƒํ™”๋ฅผ ํ•ฉ์„ฑ ๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ์ฒด ์บก์Šํ™”๋‹ค.

๐ŸŽˆ ํ˜‘๋ ฅ ํŒจํ„ด ์„ค๊ณ„ํ•˜๊ธฐโ€‹

  • ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ ์ ˆํžˆ ์ถ”์ƒํ™”ํ•˜๊ณ  ๋‚˜๋ฉด ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ƒ๋žตํ•œ ์ฑ„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„๋งŒ์„ ์ด์šฉํ•ด ๊ฐ์ฒด ์‚ฌ์ด์˜ ํ˜‘๋ ฅ์„ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ถ”์ƒํ™”๋งŒ์œผ๋กœ ๊ตฌ์„ฑํ•œ ํ˜‘๋ ฅ์€ ์ถ”์ƒํ™”๋ฅผ ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ก€๋กœ ๋Œ€์ฒดํ•จ์œผ๋กœ์จ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜‘๋ ฅ ํŒจํ„ด์ด ์„ ๋ช…ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

๐ŸŽˆ ์ถ”์ƒํ™” ์ˆ˜์ค€์—์„œ ํ˜‘๋ ฅ ํŒจํ„ด ๊ตฌํ˜„ํ•˜๊ธฐโ€‹

  • ๋จผ์ € ์ ์šฉ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•˜๋Š” ์ถ”์ƒํ™”์ธ FeeCondition์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. FeeCondition์€ findTimeIntervals๋ผ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์˜คํผ๋ ˆ์ด์…˜์„ ํฌํ•จํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.
public interface FeeCondition {
// ์ ์šฉ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ธฐ๊ฐ„์„ ๊ตฌํ•œ ํ›„ List์— ๋‹ด์•„ ๋ฐ˜ํ™˜
List<DateTimeInterval> findTimeIntervals(Call call);
}
  • FeeRule์€ ๋‹จ์œ„์š”๊ธˆ(feePerDuration)๊ณผ ์ ์šฉ์กฐ๊ฑด(feeCondition)์„ ์ €์žฅํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
public class FeeRule {
private FeeCondition feeCondition;
private FeePerDuration feePerDuration;

public FeeRule(FeeCondition feeCondition, FeePerDuration, feePerDuration) {
this.feeCondition = feeCondition;
this.feePerDuration = feePerDuration;
}

// FeeCondition์—๊ฒŒ findTimeIntervals ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”
// ์‹œ๊ฐ„์˜ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜๋ฐ›์€ ํ›„ feePerDuration์˜ ๊ฐ’์„ ์ด์šฉํ•ด ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
public Money calculateFee(Call call) {
return feeCondition.findTimeIntervals(call)
.stream()
.map(each -> feePerDuration.calculate(each))
.reduce(Money.ZERO, (first, second) -> first.plus(second));
}
}
  • FeePerDuration ํด๋ž˜์Šค๋Š” ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์š”๊ธˆ์ด๋ผ๋Š” ๊ฐœ๋…์„ ํ‘œํ˜„ํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋Š” calculate ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
public class FeePerDuration {
private Money fee;
private Duration duration;

public FeePerDuration(Money fee, Duration duration) {
this.fee = fee;
this.duration = duration;
}

public Money calculate(DateTimeInterval interval) {
return fee.times(interval.duration().getSeconds() / duration.getSeconds());
}
}
  • ์ด์ œ BasicRatePolicy๊ฐ€ FeeRule์˜ ์ปฌ๋ ‰์…˜์„ ์ด์šฉํ•ด ์ „์ฒด ํ†ตํ™” ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
public class BasicRatePolicy implements RatePolicy {
private List<FeeRule> feeRules = new ArrayList<>();

public BasicRatePolicy(FeeRule ... feeRules) {
this.feeRules = Arrays.asList(feeRules);
}

@Override
public Money calculateFee(Phone phone) {
return phone.getCalls()
.stream()
.map(call -> calculate(call))
.reduce(Money.ZERO, (first, second) -> first.plus(second));
}

private Money calculate(Call call) {
return feeRules
.stream()
.map(rule -> calculateFee(call))
.reduce(Money.ZERO, (first, second) -> first.plus(second));
}
}
  • ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋‘ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ถ”์ƒํ™”์— ํ•ด๋‹นํ•œ๋‹ค. ์ด ์š”์†Œ๋“ค์„ ์กฐํ•ฉํ•˜๋ฉด ์ „์ฒด์ ์ธ ํ˜‘๋ ฅ ๊ตฌ์กฐ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์š”์†Œ์™€ ์ถ”์ƒ์ ์ธ ์š”์†Œ๋งŒ์œผ๋กœ๋„ ์š”๊ธˆ ๊ณ„์‚ฐ์— ํ•„์š”ํ•œ ์ „์ฒด์ ์ธ ํ˜‘๋ ฅ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ณ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ์บก์Šํ™”ํ•œ ์ฝ”๋“œ๋Š” ์˜ค๋กœ์ง€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋งŒ์œผ๋กœ๋„ ์ „์ฒด์ ์ธ ํ˜‘๋ ฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์ถ”์ƒํ™” ๋’ค์— ์บก์Šํ™”๋˜์–ด ์ˆจ๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ํ˜‘๋ ฅ์˜ ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

๐ŸŽˆ ๊ตฌ์ฒด์ ์ธ ํ˜‘๋ ฅ ๊ตฌํ˜„ํ•˜๊ธฐโ€‹

  • FeeCondition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹ค์ฒดํ™”ํ•˜๋Š” ํด๋ž˜์Šค์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ •์ฑ…์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๐Ÿถ ์‹œ๊ฐ„๋Œ€๋ณ„ ์ •์ฑ…โ€‹

  • TimeOfDayFeeCondition์˜ ์ธ์Šคํ„ด์Šค๋Š” ํ˜‘๋ ฅ ์•ˆ์—์„œ FeeCondition์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ FeeCondition์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์„œ๋ธŒํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
public class TimeOfDayFeeCondition implements FeeCondition {
private LocalTime from;
private LocalTime to;

public TimeOfDayFeeCondition(LocalTime from, LocalTime to) {
this.from = from;
this.to = to;
}

@Override
public List<DateTimeInterval> findTimeIntervals(Call call) {
return call.getInterval().splitByDay()
.stream()
.map(each ->
DateTimeInterval.of(
LocalDateTime.of(each.getFrom().toLocalDate(), from(each)),
LocalDateTime.of(each.getTo().toLocalDate(), to(each))
)
).collect(Collectors.toList());
}

private LocalTime from(DateTimeInterval interval) {
return interval.getFrom().toLocalTime().isBefore(from) ?
from : interval.getFrom().toLocalTime();
}

private LocalTime to(DateTimeInterval interval) {
return interval.getTo().toLocalTime().isAfter(to) ?
from : interval.getTo().toLocalTime();
}
}
  • ๋‚˜๋จธ์ง€ ์ •์ฑ… ์ƒ๋žต..
  • ์ด ์˜ˆ์ œ๋Š” ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•ด์„œ ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๋ฉด ์–ด๋–ค ์žฅ์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ž˜ ๋ณด์—ฌ์ค€๋‹ค. ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์˜ค์ง ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์™„์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ  ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์–‘์ด ๊ฐ์†Œํ•œ๋‹ค.
  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ™•์žฅ ํฌ์ธํŠธ๋ฅผ ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ•ด์ง„ ๊ตฌ์กฐ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.
  • ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์œ ์‚ฌํ•œ ํ˜‘๋ ฅ ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์—์„œ ๊ฐœ๋…์  ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.

๐ŸŽˆ ํ˜‘๋ ฅ ํŒจํ„ด์— ๋งž์ถ”๊ธฐโ€‹

  • ๊ธฐ์กด ํ˜‘๋ ฅ ๋ฐฉ์‹์— ๋ฒ—์–ด๋‚œ ๊ทœ์น™์ด ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ๊ฐ€๊ธ‰์  ๊ธฐ์กด์˜ ํ˜‘๋ ฅ ํŒจํ„ด์— ๋งž์ถ”๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ๋น„๋ก ์„ค๊ณ„๋ฅผ ์•ฝ๊ฐ„ ๋น„ํŠธ๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ์€ ์ด์ƒํ•œ ๊ตฌ์กฐ๋ฅผ ๋‚ณ๋”๋ผ๋„ ์ „์ฒด์ ์œผ๋กœ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•˜๋‹ค.

์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋ผ

  • ์ฒ˜์Œ์—๋Š” ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋˜ ํ˜‘๋ ฅ ํŒจํ„ด์ด ์‹œ๊ฐ„์ด ํ๋ฅด๋ฉด์„œ ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜๋Š” ๊ณผ์ •์—์„œ ์ผ๊ด€์„ฑ์˜ ๋ฒฝ์— ์กฐ๊ธˆ์”ฉ ๊ธˆ์ด ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ์ž์ฃผ ๋ณด๊ฒŒ ๋œ๋‹ค. ์ด ํ˜„์ƒ์€ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ˜„์ƒ์ด๋ฉฐ ์˜คํžˆ๋ ค ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜‘๋ ฅ ํŒจํ„ด์„ ํ–ฅํ•ด ์„ค๊ณ„๋ฅผ ์ง„ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์‹ ํ˜ธ๋กœ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•œ๋‹ค.
  • ํ˜‘๋ ฅ์€ ๊ณ ์ •๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ˜„์žฌ์˜ ํŒจํ„ด์ด ๋ณ€๊ฒฝ์˜ ๋ฌด๊ฒŒ๋ฅผ ์ง€ํƒฑํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ๋ณ€๊ฒฝ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜‘๋ ฅ ํŒจํ„ด์„ ํ–ฅํ•ด ๊ณผ๊ฐํ•˜๊ฒŒ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋ผ.

๐ŸŽˆ ํŒจํ„ด์„ ์ฐพ์•„๋ผโ€‹

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ์ถ”์ƒํ™”๋ฅผ ์ฐพ์€ ํ›„, ์ด ์ถ”์ƒํ™”์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ณตํ†ต์ ์ธ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋ผ.
  • ํ˜„์žฌ์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ์„ ์บก์Šํ™”ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜‘๋ ฅ๊ณผ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋ผ.
  • ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜‘๋ ฅ์˜ ๊ตฌ์กฐ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ธฐ๋‚˜๊ธด ์—ฌ์ •์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ˜‘๋ ฅ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ์œ ์‚ฌํ•œ ๋ณ€๊ฒฝ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜‘๋ ฅ ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.