9장. 우리가 사는 시간

변주한·2022년 6월 8일
0

$5 + 10 CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10
amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림
equals()
hashcode()
Equal null
Equal object
5CHF X 2 = 10CHF
Dollar/Franc 중복
공용 equals
공용 times
Franc과 Dollar 비교하기
통화?
testFrancMultiplication 제거

테스트 케이스 추가

	@Test
    public void testCurrency(){
        assertEquals("USD", Money.dollar(1).currency());
        assertEquals("CHF", Money.franc(1).currency());
    }

우선 Money에 currency() 메서드를 선언하자.

Money

 	abstract String currency();

Franc

    String currency() {
        return "CHF";
    }

Dollar

 	 String currency() {
        return "USD";
    }

Franc

    private String currency;

    public Franc(int amount) {
        this.amount = amount;
        this.currency = "CHF";
    }
    
    String currency() {
        return currency;
    }

Dollar

 	private String currency;

    public Dollar(int amount) {
        this.amount = amount;
        this.currency = "USD";
    }

    String currency() {
        return currency;
    }

흠... 가만보니 저기 필드랑 요기 currency() 함수는 위로 올릴 수 있을 것 같다

Money

 	public static Money dollar(int amount) {
        return new Dollar(amount,"USD");
    }

    public static Money franc(int amount) {
        return new Franc(amount, "CHF");
    }

    abstract Money times(int multiplier);

    String currency(){
        return currency;
    }

Franc

    public Franc(int amount, String currency) {
        super(amount,currency);
    }

Dollar

 	public Dollar(int amount, String currency) {
        super(amount,currency);
    }

$5 + 10 CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10
amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림
equals()
hashcode()
Equal null
Equal object
5CHF X 2 = 10CHF
Dollar/Franc 중복
공용 equals
공용 times
Franc과 Dollar 비교하기
통화?
testFrancMultiplication 제거

  • 큰 설계 아이디어를 다루다가 조금 곤경에 빠졌다. 그래서 좀 전에 주목했던 더 작은 작업을 수행했다.
  • 다른 부분들을 호출자(팩토리 메서드)로 옮김으로써 두 생성자를 일치시켰다.
  • times()가 팩토리 메서드를 사용하도록 만들기 위해 리팩토링을 잠시 중단했다.
  • 비슷한 리팩토링(Franc에 했던 일을 Dollar에도 적용)을 한번의 큰 단계로 처리했다.
  • 동일한 생성자들을 상위 클래스로 올렸다.
profile
늦었지만 꾸준히

0개의 댓글