Books

[์˜ค๋ธŒ์ ํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

DAHLIA CHOI 2024. 6. 17. 22:39

๋„๋ฉ”์ธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ

๋„๋ฉ”์ธ์ด๋ž€?

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„์•ผ

  • ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•จ

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

 

ํด๋ž˜์Šค ๊ตฌํ˜„

public class Screening {
	private Movie movie;
	private LocalDateTime whenScreened;
	
	public Screening(Movie movie, LocalDateTime whenScreened) {
		this.movie = movie;	
		this.whenScreened = whenSceened;
	}
	
	public LocalDateTime getStartTime() {
		return whenScreened;
	}
...
}

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ€์‹œ์„ฑ์€ private์ด๊ณ , ๋ฉ”์„œ๋“œ๋Š” public์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ ๊ฐ€์‹œ์„ฑ์ด๋ž€?

public, private, protected ๊ฐ™์€ ๊ณต๊ฐœ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค.

 

โœ๏ธ ํด๋ž˜์Šค์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ๋ถ„์ง“์ž

ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์™€ ์™ธ๋ถ€๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ํ›Œ๋ฅญํ•œ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ต์‹ฌ ๋ถ€๋ถ„์„ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜๊ณ , ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ฐ์ถœ์ง€ ์ •ํ•ด์•ผ ํ•œ๋‹ค!!

→ ์™ธ๋ถ€์—์„œ๋Š” ๊ฐœ์ฒด์˜ ์†์„ฑ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰๊ณ  ์ ์ ˆํ•œ public ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

์™œ? ๊ฒฝ๊ณ„์˜ ๋ช…ํ™•์„ฑ์ด ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ๋Ÿผ ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ• ๊นŒ?

  • ์บก์Šํ™”
    • ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ์ฒด ๋‚ด๋ถ€๋กœ ํ•จ๊ป˜ ๋ฌถ์Œ
  • ์ ‘๊ทผ ์ œ์–ด
    • ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์„ ํ†ต์ œํ•จ
  • ์ ‘๊ทผ ์ˆ˜์ •์ž
    • ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์œ„ํ•ด public, protected, private๋ฅผ ์‚ฌ์šฉ

์บก์Šํ™”์™€ ์ ‘๊ทผ ์ œ์–ด๋Š” ๊ฐ์ฒด๋ฅผ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

  1. ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค
  2. ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„
  3. ๊ตฌํ˜„
  4. ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์˜ค์ง ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„

๐Ÿ‘‰ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š” ์ˆจ๊ธฐ๊ณ  ํ–‰๋™๋งŒ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜์ž!!

 

 

๊ตฌํ˜„ ์€๋‹‰์„ ๊ตฌํ˜„ํ•˜์ž

ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์—ญํ• ์„ ํด๋ž˜์Šค ์ž‘์„ฑ์ž, ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ ๊ตฌ๋ถ„ํ•˜์ž ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆจ๊ฒจ ๋†“์€ ๋ถ€๋ถ„์— ๋งˆ์Œ๋Œ€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฉ์ง€ํ•˜์—ฌ์„œ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์— ๋Œ€ํ•œ ์˜ํ–ฅ์„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋งˆ์Œ๋Œ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด

public class Money {
	public static final Money ZERO = Money.wons(0);
	
	private final BigDecial amount;
	
	public static Money wons(long amount) {
		return new Money(BigDecimal,valueOf(amount));
	}
}
public class Reservation {
	private Money fee;
	
	public Reservation (Money fee) {
		this.fee = fee;
	}
}

์š”๊ธˆ์„ long ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋งŒ ํฌํ•จํ•˜๋”๋ผ๋„ ๊ฐœ๋…์„ ๋ฉด์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ „์ฒด์ ์ธ ์„ค๊ณ„์˜ ๋ช…ํ™•์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ

์„ค๊ณ„๊ฐ€ ์œ ์—ฐํ•ด์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋Š” ์ ์  ๋” ์–ด๋ ค์›Œ์ง€๋Š” ๋ฐ˜๋ฉด์—, ์œ ์—ฐ์„ฑ์„ ์–ต์ œํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋Š” ์‰ฌ์›Œ์ง€์ง€๋งŒ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

→ ํ•ญ์ƒ ์œ ์—ฐ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ ์‚ฌ์ด์—์„œ ๊ณ ๋ฏผํ•˜์ž. ๋ฌด์กฐ๊ฑด ์œ ์—ฐํ•œ ์„ค๊ณ„๋„ ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋„ ์ •๋‹ต์ด ์•„๋‹Œ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ž

 

์ฐจ์ด์— ์˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋งŒ ์ถ”๊ฐ€ํ•ด์„œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

 

์—…์บ์ŠคํŒ…์ด๋ž€?

์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๊ฒƒ

 

๋‹คํ˜•์„ฑ์ด๋ž€?

๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ–ˆ์„ ๋•Œ ๊ฐ์ฒด ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ

 

์ฑ…์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ Movieํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒํด๋ž˜์Šค์ธ DiscountPolicy์— ์˜์กดํ•œ๋‹ค. ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์˜์กด์„ฑ์€ Movie์—์„œ DiscountPolicy๋กœ ํ–ฅํ•œ๋‹ค.

๋ฐ˜๋ฉด, ์‹คํ–‰ ์‹œ์ ์—๋Š” ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” AmountDiscountPolicy, PercentDiscountPolicy ์ธ์Šคํ„ด์Šค์ด๋‹ค.

๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. AmountDiscountPolicy, PercentDiscountPolicy๋Š” DiscountPolicy๋ฅผ ์ƒ์†๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹คํ˜•์ ์ธ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋˜ ๊ฒƒ์ด๋‹ค.

 

๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•?

  • ์ง€์—ฐ ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๋™์  ๋ฐ”์ธ๋”ฉ
    • ๋ฉ”์‹œ์ง€์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ
  • ์ดˆ๊ธฐ ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ์ •์  ๋ฐ”์ธ๋”ฉ
    • ์ „ํ†ต์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ฒ˜๋Ÿผ ์ปดํŒŒ์ผ ์‹œ์ ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ

์ƒ์†์ด๋ž€?

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

์ƒ์†์˜ ๋‹จ์ 

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

์ด ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜ํƒ€๋‚œ ๊ฐœ๋…์ด ํ•ฉ์„ฑ์ด๋‹ค.

 

ํ•ฉ์„ฑ์ด๋ž€?

์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์„ ํšจ๊ณผ์ ์œผ๋กœ ์บก์Šํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜์กดํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด ๋น„๊ต์  ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

→ ์ƒ์†์€ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š” ๋ฐ ๋น„ํ•ด ํ•ฉ์„ฑ์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ํ›จ์”ฌ ์ข‹์•„์ง„๋‹ค.

ํ•˜์ง€๋งŒ, ์ƒ์†์„ ์ง€์–‘ํ•˜์ง€ ๋ง๋ผ๋Š”๊ฑด ์•„๋‹˜!! ํ•ฉ์„ฑ๊ณผ ์ƒ์†์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ž