Programming

연산자 재정의 하기

허니몬 2014. 3. 26. 17:16



프로그래밍 그루비

저자
디에크 쾨니히, 기욤 라포르쥬, 앤드루 글러버, 폴킹, 존 스킷 지음
출판사
인사이트 | 2009-03-02 출간
카테고리
컴퓨터/IT
책소개
프로그래밍 그루비 는 그루비의 문법과 사용하는 법을 이해하기 쉽...
가격비교 글쓴이 평점  

짬짬이 그루비Groovy를 살펴보기 시작했다. 순 그레들gradle을 능숙하게 다루기 위한 목적으로 살펴보고 있는데,
그루비가 가지고 있는 매력도 상당하다.

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) 연산자 사용
    }

}