Programming
연산자 재정의 하기
허니몬
2014. 3. 26. 17:16
짬짬이 그루비Groovy를 살펴보기 시작했다. 순 그레들gradle을 능숙하게 다루기 위한 목적으로 살펴보고 있는데,
그루비가 가지고 있는 매력도 상당하다.
- Rocking The Groovy - github
신기하다잉!? +_+)?
Type plus(Type type) {}
를 재정의하니까 다른 형태로 동작한다.
package kr.pe.ihoney.groovy.study.begin
class Money {
private int amount
private String currency
Money(int amount, String currency) {
this.amount = amount;
this.currency = currency;
}
/**
* 재정의된 plus(+) 연산자
* @param other
* @return
*/
Money plus(Money other) {
assert null != other
if(other.currency != currency)
throw new IllegalArgumentException("Cannot add $other.currency to $currency");
return new Money(amount + other.amount, currency);
}
@Override
public int hashCode() {
amount.hashCode() + currency.hashCode()
}
@Override
public boolean equals(Object other) {
if(null == other) return false
if(!(other instanceof Money)) return false
if(currency != other.currency) return false
if(amount != other.amount) return false
return true
}
}
package kr.pe.ihoney.groovy.study.begin;
import static org.junit.Assert.*;
import org.junit.Test;
class MoneyTest {
Money money
@Test
public void test() {
def bulk = new Money(1000, "WON")
assert bulk
assert bulk == new Money(1000, "WON") //재정의된 ==(equals) 연산자 사용
assert bulk + bulk == new Money(2000, "WON") // 재정의된 +(plus) 연산자 사용
}
}