1부 6장 돌아온 모두를 위한 평등

< 현재 구현해야할 목록 >

  • $5 + 10CHF = $10 (환율이 2:1일 경우)
  • $5 * 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용
  • Money 반올림
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • ~~ 5CHF * 2 = 10CHF~~
  • Dollar/Franc 중복제거
  • 공용 equals
  • 공용 times

앞에서 우리는 테스트를 통과하기 위해서 코드를 복사해서 사용하는 잘못을 저질렀다.

  • 이를 해결하기 위한 방법은 2가지가 있다.
  1. 우리가 만든 새로운 클래스가 이전의 클래스를 상속받게 하는 것
    -> 해봤지만 큰 효과가 없음
  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 = $10
  • amount를 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() 구현을 일치시켰다.

좋은 웹페이지 즐겨찾기