์กฐ์ํธ๋์ ์ค๋ธ์ ํธ๋ฅผ ์ฝ๊ณ ์ ๋จธ๋ฆฟ์์ ์๋ ๋ด์ฉ๋ค์ ์ ๋ฆฌํ๋ฉฐ ์์ฑํ ๊ธ์ ๋๋ค.
์ฑ ์ ์ฃผ๋ ์ค๊ณ
๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ค๊ณํ๊ฒ๋๋ฉด ์ ์ฐํ ์ค๊ณ๋ฅผ ํ๊ธฐ ํ๋ค๋ค.
์ ์ด์, '๋ฐ์ดํฐ' ๋ผ๋ ๊ฒ์ ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด์ด๊ณ , ์ด๋ ๊ตฌํ์ ํด๋นํ๋ค.
๋ฐ๋ผ์, ๋ฐ์ดํฐ ์ค์ฌ์ ์ค๊ณ๋ ๊ฐ์ฒด์ ๊ตฌํ๋ถ์ ์ด์ ์ ๋ง์ถ๊ณ ์ค๊ณ ํ๋ค๋ ์๋ฏธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ผ๋ก ๊ฐ์ฒด ๊ฐ ํ๋ ฅ์ ์๊ฐํ๊ฒ ๋๋ฉด ์ธ๋ถ ๊ฐ์ฒด์๊ฒ ์์ ์ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๋ฏ๋ก ์บก์ํ๋ฅผ ๋ฐฉํดํ๊ฒ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ตฌํ์ ์ค์ ์ผ๋กํ ์ค๊ณ๋ ์บก์ํ๋ฅผ ์ ํดํ๊ณ ์์ง๋๋ ๋ฎ์ถ๊ณ ๊ฒฐํฉ๋๋ ๋์์ผ๋ก์ ๋ณํ์ ์ทจ์ฝํ ์ค๊ณ๊ฐ ๋๋ค.
๐ก ๋ฐ๋ผ์, ๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ธ ํ๋ ฅ, ์ฑ ์, ์ญํ ์ค ๊ฐ์ฅ ์ค์ํ ์ฑ ์ ์ ์ค์ ์ผ๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ ์ฐํ ์ค๊ณ๋ฅผ ํ ์ ์๊ฒ ํด์ค๋ค.
[ ๊ฐ์ฒด๊ฐ ํฌํจํด์ผํ๋ ๋ฐ์ดํฐ๋ ๋ฌด์์ธ๊ฐ → ์ด ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์๋ ํ๋ ฅ์ ๋ฌด์์ธ๊ฐ] ๋ฅผ ์๊ฐํ๋ ๊ฒ์ด ์๋
[ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ ๊ณตํด์ผํ๋ ํ๋์ ๋ฌด์์ธ๊ฐ → ๊ทธ ํ๋์ ํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ๋ ๋ฌด์์ธ๊ฐ] ๋ฅผ ์๊ฐํด์ผํ๋ค.
์ฑ ์ ํ ๋น์ ์ํ GRASP ํจํด
GRASP (General Responsibility Assignment Software Pattern)์ ์ฑ ์์ ํ ๋นํ ๋ ์ง์นจ์ผ๋ก ์ผ์ ์ ์๋ ์์น๋ค์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
1๏ธโฃ Information Expert ํจํด
๐ก ์ฑ ์์ ์ํํ ์ ๋ณด๋ฅผ ์๊ณ ์๋ ๊ฐ์ฒด์๊ฒ ์ฑ ์์ ๋ถ์ฌํ๋ค๋ ์์น์ด๋ค.
์ํ ์๋งค ์๋น์ค๊ฐ ์๋ค๊ณ ํ์ ๋,
์ํ๋ฅผ ์๋งคํด๋ผ ๋ผ๋ ์ฑ ์์ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ ์ ํ ๊น? ๊ณ ๋ฏผํ๊ณ ์ฑ ์์ ๋ถ์ฌํ๋ค.
์ํ ์์ ์์ ์๊ฐ๊ณผ ํ์ฐจ ๋ฑ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๋ '์์' ๊ฐ์ฒด๊ฐ ๊ฐ์ฅ ์ ์ฒ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ํ ์๋งค๋ฅผ ์ํด ๊ฐ๊ฒฉ์ ๊ณ์ฐํด์ผํ๋๋ฐ, ์ํ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ผ ๋ผ๋ ์ฑ ์์ ๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ ์ ํ ๊น? ๊ณ ๋ฏผํ๊ณ ์ฑ ์์ ๋ถ์ฌํ๋ค.
์ํ ๊ฐ๊ฒฉ์ ๋ํ ์ ๋ณด๋ '์ํ' ๊ฐ์ฒด๊ฐ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ผ๋ฏ๋ก ๊ฐ์ฅ ์ ์ฒ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ด์ฒ๋ผ, ์ด๋ค ์ฑ ์์ ์ ํ๊ณ , ๊ทธ ์ฑ ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ฅ ๋ง์ด ์๊ณ ์์ด์ ์ ์ํํ ์ ์์ ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๊ณ ์ฑ ์์ ๋ถ์ฌํ๋ ๋ฐฉ์์ด๋ค.
2๏ธโฃ Low Coupling ํจํด
๐ก ์ค๊ณ์ ์ ์ฒด์ ์ธ ๊ฒฐํฉ๋๊ฐ ๋ฎ๊ฒ ์ ์ง๋๋๋ก ์ฑ ์์ ๋ถ์ฌํ๋ค๋ ์์น์ด๋ค.
'์์' ์ '์ํ' ๋ฅผ ์๊ณ ์๊ณ '์ํ' ๋ 'ํ ์ธ์กฐ๊ฑด' ์ ์๊ณ ์๋ค.
์ด๋, '์์' ์ด '์ํ' ์๊ฒ [์ํ ๊ฐ๊ฒฉ์ ๊ณ์ฐํด๋ผ] ๋ผ๋ ์ฑ ์์ ์์ฒญํ๋ฉด, '์ํ' ๋ 'ํ ์ธ์กฐ๊ฑด' ๊ณผ ํ๋ ฅํ์ฌ ํ ์ธ๊ฐ๋ฅผ ๊ณ์ฐํ ๋ค ์๋ตํ๋ค.
'์์' ์ด 'ํ ์ธ์กฐ๊ฑด' ๊ณผ ์ง์ ํ๋ ฅํ์ฌ ํ ์ธ ์ ๋ณด๋ฅผ ๊ตฌํ ๋ค, '์ํ' ์๊ฒ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ผ๊ณ ๋ ํ ์ ์์ง๋ง
์ด ๊ฒฝ์ฐ, '์์'๊ณผ 'ํ ์ธ์กฐ๊ฑด' ์ ๊ฒฐํฉ ๊ด๊ณ๊ฐ ์ถ๊ฐ๋๋ค.
๋ฐ๋ผ์, ์ด๋ฏธ '์ํ' ์ 'ํ ์ธ์กฐ๊ฑด' ์ ๊ฒฐํฉ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐํฉ ๊ด๊ณ๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ํ๋ ฅํ ์ ์๋๋ก ํ๋ ๊ฒ์ ์งํฅํ๋ฉด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
3๏ธโฃ High Cohesion ํจํด
๐ก ๋์ ์์ง๋๋ฅผ ์ ์งํ ์ ์๊ฒ ์ฑ ์์ ๋ถ์ฌํ๋ค๋ ์์น์ด๋ค.
'์์'๊ณผ 'ํ ์ธ์กฐ๊ฑด' ์ด ํ๋ ฅํ๊ณ ์๋ ๊ด๊ณ๋ผ๋ฉด
'ํ ์ธ์กฐ๊ฑด' ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ '์ํ' ์ '์์' ๋ ๋ค ์ํฅ์ ๋ฐ๊ฒ ๋๋ค.
4๏ธโฃ Creator ํจํด
์ํ ์๋งค ์๋น์ค์ ๊ฒฝ์ฐ
์ต์ข ์ ์ผ๋ก ์์ฑํด์ผํ๋ ๊ฐ์ฒด๋ ์๋งค ์ ๋ณด๋ฅผ ๋ด์ '์๋งค' ๊ฐ์ฒด์ด๋ค.
'์๋งค' ๊ฐ์ฒด๋ฅผ ๊ฐ์ฅ ์ ์์ฑํ ์ ์๋ ๊ฐ์ฒด(์ฐฝ์กฐ์)๋ฅผ ์ฐพ๊ณ ๊ทธ ๊ฐ์ฒด์๊ฒ ์ฑ ์์ ํ ๋นํ๋ ๊ฒ์ด๋ค.
'์ํ' ๊ฐ '์๋งค' ๊ฐ์ฒด๋ฅผ ๊ฐ์ฅ ์ ์์ฑํ ์ ์์๊น?
'์ํ' ๋ ์์ ์ ๋ณด๊ฐ ์ ํ ์๋ค.
'ํ ์ธ์กฐ๊ฑด' ์ ๊ฒฝ์ฐ๋ ์ํ ์ ๋ณด๋ ๋ชจ๋ฅด๊ณ ์์ ์ ๋ณด๋ ๋ชจ๋ฅธ๋ค.
ํ์ง๋ง, '์์' ์ ์์ ์ ๋ณด์ ์ํ ์ ๋ณด ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฉ์ ๋ํ ์ ๋ณด๊น์ง ๋ชจ๋ ์๊ณ ์์ผ๋ฏ๋ก '์๋งค' ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ๊ฐ์ฒด์ด๋ค.
์ง๊ธ๊น์ง ๋ฐฐ์ด ์์น์ ์ ๋ ํด์ ๊ตฌํํด๋ณด๊ธฐ
1๏ธโฃ ์ํ๋ฅผ '์๋งค' ํด๋ผ. '์๋งค' ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ๊ฐ์ฒด๋ ๋ฌด์์ผ๊น?
creator ํจํด์ผ๋ก ๋จผ์ ์๊ฐํด๋ณด๋, ์์ ์๊ฐ, ์ํ ์ ๋ณด, ๊ฐ๊ฒฉ ๋ฑ์ ๋ค ์ ์ ์๋ '์์' ๊ฐ์ฒด๊ฐ ์ด ์ฑ ์์ ๋งก๋ ๊ฒ์ด ํฉ๋นํ๋ค.
๊ทธ๋ฌ๋ฉด, '์์' ํด๋์ค๋ ์๋งคํด๋ผ ๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก '์๋งค' ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผํ๋ค.
public class Screening {
public Reservation reserve(Customer customer, int audienceCount) {
}
}
2๏ธโฃ ์ฑ ์์ ๋ถ์ฌํ์ผ๋ฏ๋ก, ๊ทธ ์ฑ ์์ ์ํํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํด๋ ๋๋ค.
์์ ์๊ฐ๊ณผ ํ์ฐจ, ๊ทธ๋ฆฌ๊ณ ์ํ ๋ฐ์ดํฐ๋ฅผ ์๊ณ ์์ด์ผ ์๋งค ์ ๋ณด๋ฅผ ๊ตฌ์ฑํ ์ ์์ ๊ฒ์ด๋ค.
public class Screening {
private Movie movie;
private int sequence;
private LocalDateTime whenScreened;
public Reservation reserve(Customer customer, int audienceCount) {
}
}
3๏ธโฃ ์๋งค๋ฅผ ํ๊ธฐ ์ํด์๋, ์ํ ๊ฐ๊ฒฉ์ ์์์ผํ๋ค.
์ํ ๊ฐ๊ฒฉ์ ๊ณ์ฐํด๋ผ ๋ผ๋ ์๋ก์ด ์ฑ ์์ด ์๊ฒผ๋ค.
์ด ์ฑ ์๋ '์์' ์ด ๋งก๋ ๊ฒ์ด ์ข์๊น?
'์์' ์ด '์ํ' ๊ฐ์ฒด ์์ ์๋ ๊ฐ๊ฒฉ์ ๋ค๋ฃจ๊ธฐ ๋ณด๋ค๋
'์ํ' ๊ฐ์ฒด๊ฐ ์์ ์ด ๊ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ๊ฐ์ฒด์ ์์จ์ฑ์ ๋์ฌ์ฃผ๋ ํ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํน์๋, ์์ ์๊ฐ์ด๋ผ๋์ง ์์ ํ์ฐจ์ ๋ฐ๋ผ ํ ์ธ ์กฐ๊ฑด์ ์ถ๊ฐํ ์๋ ์์ผ๋ฏ๋ก
'์ํ' ์๊ฒ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ผ๊ณ ์์ฒญํ ๋, '์์' ์ ๋ณด๋ฅผ ํจ๊ป ์ ๋ฌํ๊ณ ์๋งค ์ธ์์๋ ์ ๋ฌํด์ค๋ค.
public class Screening {
private Movie movie;
private int sequence;
private LocalDateTime whenScreened;
public Reservation reserve(Customer customer, int audienceCount) {
return new Reservation(customer, this, calculateFee(audienceCount), audienceCount);
}
private Money calculateFee(int audienceCount) {
return movie.calculateFee(this).times(audienceCount);
}
}
public class Movie {
public Money calculateMovieFee(Screening screening) {
}
}
5๏ธโฃ ์ด์ '์ํ'๋ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ผ๋ ์ฑ ์์ ํ ๋น๋ฐ์์ผ๋ฏ๋ก ์ฑ ์์ ์ํํ๊ธฐ ์ํ ํ๋์ ๊ฒฐ์ ํด์ผํ๋ค.
๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋ผ ๋ผ๋ ์ฑ ์์ ์ํํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํด๋ ๋๋ค.
'์ํ'๋ 'ํ ์ธ์กฐ๊ฑด'์ ์๊ณ ์์ด์ผํ๊ณ ๊ธฐ๋ณธ ๊ฐ๊ฒฉ์ ์๊ณ ์์ด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์ํ๊ฐ ์ด๋ค ํ ์ธ ์ ์ฑ ์ ๋ฐ๋ฅด๊ณ ์๋์ง ์์์ผํ๋ค.
public class Movie {
private String title;
private Duration runningTime;
private Money fee;
private List<DiscountCondition> discountConditions;
private MovieType movieType;
private Money discountAmount;
private double discountPercent;
public Money calculateMovieFee(Screening screening) {
if (isDisCountable(screening)) {
return fee.minus(calculateDiscountAmount());
}
return fee;
}
private boolean isDisCountable(Screening screening) {
return discountConditions.stream()
.anyMatch(condition -> condition.isSatisfiedBy(screening));
}
private Money calculateDiscountAmount(){
// ํด๋น ์ํ์ ํ ์ธ ์ ์ฑ
(movieType)์ ๋ฐ๋ผ ์ ์ ํ ํ ์ธ๊ฐ๋ฅผ ๊ณ์ฐํ ์ ์๋๋ก ๊ณ์ฐํด์ ๋ฐํํ๋๋ก ํ๋ฉด ๋๋ค.
}
}
6๏ธโฃ ์์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก, ์์ ์ ๋ณด๊ฐ ํ ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง isSatisfiedBy ๋ฉ์๋๋ฅผ ํตํด ํ์ธํ๋ค.
public class DiscountCondition {
private DiscountConditionType type;
private int sequence;
private DayOfWeek dayOfWeek;
private LocalTime startTime;
private LocalTime endTime;
public boolean isSatisfiedBy(Screening screening) {
// ์ํ ํ ์ธ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ํ์ฐจ๋ฉด screening ์ ํ์ฐจ ํ์ธ
// ํ ์ธ ์กฐ๊ฑด ๊ฐ์ง sequence์ ๋น๊ต
// ์ํ ํ ์ธ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ์๊ฐ๋๋ฉด screening์ ์์ ์๊ฐ ํ์ธ
// ํ ์ธ ์กฐ๊ฑด์ด ๊ฐ์ง startTime์ endTime๊ณผ ๋น๊ต
}
}
๐จ ์ฌ๊ธฐ์ ์ค๊ณ๋ฅผ ์ํ ๊ฒ ๊ฐ์ง๋ง ์ดํด๋ณด๋ฉด ๋ฌธ์ ์ ์ด ๋ณด์ธ๋ค.
๋ง์ฝ, DiscountCondition์ ํ ์ธ ์กฐ๊ฑด๊ณผ ๊ด๋ จ๋ ํ์ฐจ ๊ธฐ์ค์ด ๋ฐ๋๋ฉด, isSatisfiedBy ์ฝ๋๋ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์ธ ์กฐ๊ฑด๊ณผ ๊ด๋ จ๋ ์์ ์์๊ณผ ๋๋๋ ์๊ฐ ๊ธฐ์ค์ด ๋ฐ๋์ด๋ isSatisfiedBy ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
๋ค์ ๋งํ๋ฉด, isSatisfiedBy ์ฝ๋๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ์์ ์ด ํ ๊ฐ์ง ์ด์ ๊ฐ ์๋๋ผ ์ฌ๋ฌ๊ฐ์ง ์ด์ ์ ์ํฅ์ ๋ฐ๋๋ค.
๋ฐ๋ผ์, ์์ง๋๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ์ ์ ์๊ณ ํ์ฐจ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ธ ์ฌ๋ถ๋ฅผ ํ์ ํ๋ ํด๋์ค์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์ธ ์ฌ๋ถ๋ฅผ ํ์ ํ๋ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ ํด๋์ค์ ์์ง๋๋ฅผ ๋์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐ๋ผ์, ํ ์ธ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ ํ๋ isSatisfiedBy ๋ฉ์๋๋ ์ธํฐํ์ด์ค๋ก์ ์ ์ํ๊ณ
๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ํ์ฐจ๊ธฐ์ค ํ ์ธ ์กฐ๊ฑด ํด๋์ค์ ์์ ์๊ฐ ๊ธฐ์ค ํ ์ธ ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ๋๋ค.
disCountCondition ํด๋์ค๋ ์ฌ์ค ๊ธฐ๊ฐ์ ๋น๊ตํ๋ ์ฑ ์ 1๊ฐ์ ํ์ฐจ๋ฅผ ๋น๊ตํ๋ ์ฑ ์ 1๊ฐ๋ฅผ ๊ฐ๊ฐ ๊ฐ๊ณ ์๋ ์ ์ด์๋ค.
์ด๋ฅผ ์ฝ๊ฒ ํ๋จํ ์ ์๋ ๋ฐฉ๋ฒ์, ์ด๋ค ํด๋์ค์ ํต์ฌ ์ฑ ์์ ๊ตฌํํ๊ธฐ ์ํ ํ๋์ด ์์ ์ด ๊ฐ๊ณ ์๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋์ง๋ก ํ๋จํ ์ ์๋ค.
discountCondition์ sequence๋ ๊ฐ๊ณ startTime๋ ๊ฐ์ง๋ง, isSatisfiedByPeriod() ๋ฉ์๋์์๋ sequence๋ ์ฌ์ฉ๋์ง ์๊ณ
isSatisfiedBySequence() ๋ฉ์๋์์๋ startTime์ endTime์ด ์ฌ์ฉ๋์ง ์๋ ๊ฒ ์ฒ๋ผ ๋ง์ด๋ค.
๋ฐ๋ผ์, ์์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ฐ์ ์์ผ์ฃผ๋ฉด ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ๋ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์์ ๊ฐ์ ๊ตฌ์กฐ์์, ํ์ฐจ๋ ์๊ฐ์ด ์๋ ๋ค๋ฅธ ํ ์ธ ์กฐ๊ฑด์ด ์ถ๊ฐ๋์ด๋ discountCondition ํด๋์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์ถ๊ฐํจ์ผ๋ก์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๊ฒ๋๋ค.
Movie ํด๋์ค ์ญ์, discountAmount์ discountPercent ๊ณผ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ํ ์ธ ๊ณ์ฐ ํ๋ก์ธ์ค์ ๊ด๋ จ๋ ๋ณ์๋ฅผ ๊ฐ๊ณ ์๋๋ฐ, ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ํ ์ธ๊ฐ๋ฅผ ๊ตฌํด๋ผ ๋ผ๋ ์ญํ ๋ก ์ถ์ํ์์ผ ๋ถ๋ฆฌํ๊ณ
๊ตฌ์ฒด์ ์ธ ํ ์ธ๊ฐ ๊ณ์ฐ ๋ฐฉ๋ฒ์ ์ฑ ์์ผ๋ก์ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ ์ ์ฐํ ๊ตฌ์กฐ๋ก ๊ฐ์ ํ ์ ์๊ฒ๋๋ค.