[์ค๋ธ์ ํธ] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
๋๋ฉ์ธ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ
๋๋ฉ์ธ์ด๋?
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ ๋ถ์ผ
- ๋๋ฉ์ธ ๊ฐ๋ ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ํด๋์ค๋ฅผ ์ฌ์ฉํจ
→ ํด๋์ค ์ด๋ฆ์ ๋์๋๋ ๋๋ฉ์ธ ๊ฐ๋ ์ ์ด๋ฆ๊ณผ ๋์ผํ๊ฑฐ๋ ์ ์ฌํ๊ฒ ์ง์ด์ผํ๋ค. ์? ํด๋์ค ์ฌ์ด์ ๊ด๊ณ๋ ์ต๋ํ ๋๋ฉ์ธ ๊ฐ๋ ์ฌ์ด์ ๋งบ์ด์ง ๊ด๊ณ๋ ์ ์ฌํ๊ฒ ๋ง๋ค์ด์ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ์์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ผํ๊ธฐ ๋๋ฌธ!
ํด๋์ค ๊ตฌํ
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๋ฅผ ์ฌ์ฉ
์บก์ํ์ ์ ๊ทผ ์ ์ด๋ ๊ฐ์ฒด๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
- ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค
- ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ถ๋ถ
- ๊ตฌํ
- ์ธ๋ถ์์๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ๊ณ ์ค์ง ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๋ถ๋ถ
๐ ๊ฐ์ฒด์ ์ํ๋ ์จ๊ธฐ๊ณ ํ๋๋ง ์ธ๋ถ์ ๊ณต๊ฐํ์!!
๊ตฌํ ์๋์ ๊ตฌํํ์
ํ๋ก๊ทธ๋๋จธ์ ์ญํ ์ ํด๋์ค ์์ฑ์, ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋จธ๋ก ๊ตฌ๋ถํ์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋จธ๊ฐ ์จ๊ฒจ ๋์ ๋ถ๋ถ์ ๋ง์๋๋ก ์ ๊ทผํ ์ ์๋๋ก ๋ฐฉ์งํ์ฌ์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋จธ์ ๋ํ ์ํฅ์ ๊ฑฑ์ ํ์ง ์๊ณ ๋ ๋ด๋ถ ๊ตฌํ์ ๋ง์๋๋ก ๋ณ๊ฒฝํ ์ ์์ด์ผ ํ๋ค.
ํ๋ ฅํ๋ ๊ฐ์ฒด๋ค์ ๊ณต๋์ฒด
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๋ฅผ ์์๋ฐ์๊ธฐ ๋๋ฌธ์ ๋คํ์ ์ธ ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๋ ๊ฒ์ด๋ค.
๋คํ์ฑ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ?
- ์ง์ฐ ๋ฐ์ธ๋ฉ ๋๋ ๋์ ๋ฐ์ธ๋ฉ
- ๋ฉ์์ง์ ๋ฉ์๋๋ฅผ ์คํ ์์ ์ ๋ฐ์ธ๋ฉํ๋ ๊ฒ
- ์ด๊ธฐ ๋ฐ์ธ๋ฉ ๋๋ ์ ์ ๋ฐ์ธ๋ฉ
- ์ ํต์ ์ธ ํจ์ ํธ์ถ์ฒ๋ผ ์ปดํ์ผ ์์ ์ ์คํ๋ ํจ์๋ ํ๋ก์์ ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ
์์์ด๋?
๊ฐ์ฒด์งํฅ์์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ด๋ค.
์์์ ๋จ์
- ์บก์ํ๋ฅผ ์๋ฐํ๋ค.
- ์์์ ํ๊ธฐ ์ํด์๋ ๋ถ๋ชจ ํด๋์ค์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ์๊ณ ์์ด์ผ ํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ถ๋ชจ ํด๋์ค์ ๊ตฌํ์ด ์์ ํด๋์ค์๊ฒ ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ ์บก์ํ๊ฐ ์ฝํด์ง๋ค.
- ์ค๊ณ๊ฐ ์ ์ฐํ์ง ์๋ค.
- ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ํ๋ค. → ์คํ ์์ ์ ๊ฐ์ฒด์ ์ข ๋ฅ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ด ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ํ๋ ๊ฐ๋ ์ด ํฉ์ฑ์ด๋ค.
ํฉ์ฑ์ด๋?
์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์์ง๋ฅผ ํตํด์๋ง ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์์ง๋ฅผ ํตํด์๋ง ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ ํจ๊ณผ์ ์ผ๋ก ์บก์ํํ ์ ์๋ค.
- ์์กดํ๋ ์ธ์คํด์ค๋ฅผ ๊ต์ฒดํ๋ ๊ฒ์ด ๋น๊ต์ ์ฝ๊ธฐ ๋๋ฌธ์ ์ค๊ณ๋ฅผ ์ ์ฐํ๊ฒ ๋ง๋ ๋ค.
→ ์์์ ํด๋์ค๋ฅผ ํตํด ๊ฐํ๊ฒ ๊ฒฐํฉ๋๋ ๋ฐ ๋นํด ํฉ์ฑ์ ๋ฉ์์ง๋ฅผ ํตํด ๋์จํ๊ฒ ๊ฒฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ํจ์ฌ ์ข์์ง๋ค.
ํ์ง๋ง, ์์์ ์ง์ํ์ง ๋ง๋ผ๋๊ฑด ์๋!! ํฉ์ฑ๊ณผ ์์์ ํจ๊ป ์ฌ์ฉํ์