Groovy는 숫자, 콜랙션, Map 등의 다양한 자료 구조를 더 쉽게 사용할 수 있게 하기 위해 연산자 재정의(operator overloading)를 지원합니다.
Groovy의 다양한 연산자들은 각각 대응되는 보통의 자바 메서드 이름을 가지고 있습니다. 따라서 자바 혹은 Groovy 클래스에 해당 이름의 메서드를 추가하면 Groovy의 연산자 재정의를 이용할 수 있습니다. 다음 표는 Groovy의 각 연산자와 그에 대응되는 메서드 이름을 나타냅니다:
연산자 |
메서드 |
|---|---|
a + b |
a.plus(b) |
a - b |
a.minus(b) |
a * b |
a.multiply(b) |
a / b |
a.divide(b) |
a++ or ++a |
a.next() |
a-- or --a |
a.previous() |
a[b] |
a.getAt(b) |
a[b] = c |
a.putAt(b, c) |
a << b |
a.leftShift(b) |
다음 모든 비교 연산자는 null을 특별히 처리해서 java.lang.NullPointerException 가 발생하는 것을 방지합니다:
Operator |
Method |
|---|---|
a == b |
a.equals(b) |
a != b |
! a.equals(b) |
a === b |
자바에서의 a == b (a와 b가 동일한 인스턴스를 지칭하고 있음) |
a <=> b |
a.compareTo(b) |
a > b |
a.compareTo(b) > 0 |
a >= b |
a.compareTo(b) >= 0 |
a < b |
a.compareTo(b) < 0 |
a <= b |
a.compareTo(b) <= 0 |
연산자에 대한 비고
Groovy에서는 비교 연산자들이 null에 대해 특별한 처리를 합니다. 따라서 a == b는 a 혹은 b 혹은 둘 다가 null인 경우 모두 결코 NullPointerException을 발생시키지 않습니다:
또한 서로 다른 숫자 타입에 대해 비교가 수행될 경우 가장 큰 숫자 타입으로 변환된 후 비교가 진행됩니다. 따라서 Groovy에서는 다음 코드가 유효합니다: