memostack
article thumbnail
Published 2020. 8. 20. 09:42
Groovy! JAVA와의 차이점 Language/Groovy
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. Default Import

아래 패키지는 기본으로 import 되어 있기 때문에 바로 사용 가능하다.

<java />
java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger java.net.* java.util.* groovy.lang.* groovy.util.*

 

2. Multi-Methods

  • 그루비는 런타임시의 인수 유형에 따라 적절한 메소드를 선택하여 실행 함.
  • 이렇게 호출하는 방식을 디스패치(Dispatch) 또는 다중메소드(Multi-Methods)라고 함.
<java />
int method(String arg) { return 1; } int method(Object arg) { return 2; } Object o = "Object"; int result = method(o); // Groovy는 런타임시에 인수에 따라 적절한 메소드를 호출 함 println(result) // 1
  • 위에서는 그루비가 Object o를 런타임시에 문자열로 보기 때문에 method 호출시 int method(String arg)로 호출한다.
  • Java에서는 2라는 값을 기대하겠지만, Groovy에서는 1을 반환한다.

 

3. Array initialize

<java />
// int[] array = {1, 2, 3}; // JAVA 문법 int[] array = [1, 2, 3]; // Groovy 문법 println(array) // groovy 3.0+ 부터는 아래와 같이 사용 가능 int[] array2 = new int[] {4, 5, 6}; def array3 = new int[] {7, 8, 9} println(array2) println(array3)

 

4. Package Scope Visibility

package-private으로 필드를 생성하고 싶을때는 @PackageScope 를 사용한다.

<java />
import groovy.transform.PackageScope class PersonGroovy { @PackageScope String name } class PersonJava { String name }

 

5. ARM Blocks

JAVA 7에서 소개된 ARM (Automatic Resource Management) blocks.

  • 리소스를 직접 close() 할 필요 없이 자동으로 해제시켜줌
<java />
// JAVA Path file = Paths.get("/path/to/file"); Charset charset = Charset.forName("UTF-8"); try (BufferedReader reader = Files.newBufferedReader(file, charset)) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } // Groovy 3+ new File('/path/to/file').eachLine('UTF-8') { println it } // Groovy - 만약 JAVA의 클로저와 비슷하게 사용하고 싶다면 아래와 같이 한다. new File('/path/to/file').withReader('UTF-8') { reader -> reader.eachLine { println it } }

 

 

6. Inner Classes

6.1. Static Inner Class

<java />
class A { static class B {} } new A.B()

6.2. Anonymous Inner Class

<java />
import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit CountDownLatch called = new CountDownLatch(1) Timer timer = new Timer() timer.schedule(new TimerTask() { void run() { called.countDown() } }, 0) assert called.await(10, TimeUnit.SECONDS)

 

7. Reference

http://groovy-lang.org/differences.html

 

The Apache Groovy programming language - Differences with Java

In Java == means equality of primitive types or identity for objects. In Groovy == means equality in all cases. It translates to a.compareTo(b) == 0, when evaluating equality for Comparable objects, and a.equals(b) otherwise. To check for identity (referen

groovy-lang.org

 

반응형

'Language > Groovy' 카테고리의 다른 글

Groovy 다운로드 및 사용 환경 구축 (Version 3.0.5)  (0) 2020.08.20
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!