Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

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을 발생시키지 않습니다:

Code Block
java
java
def a = null
def b = "foo"

assert a != b
assert b != a
assert a == null

또한 서로 다른 숫자 타입에 대해 비교가 수행될 경우 가장 큰 숫자 타입으로 변환된 후 비교가 진행됩니다. 따라서 Groovy에서는 다음 코드가 유효합니다:

Code Block
java
java
Byte a = 12
Double b = 10

assert a instanceof Byte
assert b instanceof Double

assert a > b