1부 6장 돌아온 모두를 위한 평등
< 현재 구현해야할 목록 >
- $5 + 10CHF = $10 (환율이 2:1일 경우)
$5 * 2 = $10amount를 private로 만들기Dollar 부작용- Money 반올림
equals()- hashCode()
- Equal null
- Equal object
- ~~ 5CHF * 2 = 10CHF~~
- Dollar/Franc 중복제거
- 공용 equals
- 공용 times
앞에서 우리는 테스트를 통과하기 위해서 코드를 복사해서 사용하는 잘못을 저질렀다.
- 이를 해결하기 위한 방법은 2가지가 있다.
- 우리가 만든 새로운 클래스가 이전의 클래스를 상속받게 하는 것
-> 해봤지만 큰 효과가 없음 - 대신 두 클래스의 공통 상위 클래스를 찾아낸다.
-> 시간이 좀 걸리지만 아주 잘 작동함!
- 두 화폐 클래스의 상위 개념인 Money class를 작성한다. 그리고 Dollar에 Money 상속시킨다.
class Money {
protected int amount;
}
class Dollar extends Money {
......
}
- equals() 코드를 Money로 올린다.
public class Money {
protected int amount;
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount;
}
}
- Franc equals(), Dollar equals() 부분을 변경한다.
// Franc
public class Franc extends Money{
public Franc(int amount) {
this.amount = amount;
}
public Franc times(int multiplier) {
return new Franc( amount * multiplier);
}
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount;
}
}
// Dollar
public class Dollar extends Money {
public Dollar(int amount) {
this.amount = amount;
}
public Dollar times(int multiplier) {
return new Dollar( amount * multiplier);
}
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount;
}
}
< 현재 구현해야할 목록 >
- $5 + 10CHF = $10 (환율이 2:1일 경우)
$5 * 2 = $10amount를 private로 만들기Dollar 부작용- Money 반올림
equals()- hashCode()
- Equal null
- Equal object
- ~~ 5CHF * 2 = 10CHF~~
- Dollar/Franc 중복제거
공용 equals- 공용 times
지금까지 우리는
- 공통된 코드를 첫 번째 Dollar class 에서 상위 Money class로 옮겼다.
- 두 번째 Franc class도 Money class를 상속시켰다.
- 불필요한 구현을 제거하기 위해서 두 equals() 구현을 일치시켰다.
Author And Source
이 문제에 관하여(1부 6장 돌아온 모두를 위한 평등), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiunii/1부-6장-돌아온-모두를-위한-평등저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)