블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
Default Import
아래 패키지는 기본으로 import
되어 있기 때문에 바로 사용 가능하다.
java.io.*
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
Multi-Methods
- 그루비는 런타임시의 인수 유형에 따라 적절한 메소드를 선택하여 실행 함.
- 이렇게 호출하는 방식을 디스패치(
Dispatch
) 또는 다중메소드(Multi-Methods
)라고 함.
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을 반환한다.
Array initialize
// 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)
Package Scope Visibility
package-private으로 필드를 생성하고 싶을때는 @PackageScope
를 사용한다.
import groovy.transform.PackageScope
class PersonGroovy {
@PackageScope String name
}
class PersonJava {
String name
}
ARM Blocks
JAVA 7에서 소개된 ARM (Automatic Resource Management) blocks.
- 리소스를 직접 close() 할 필요 없이 자동으로 해제시켜줌
// 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
}
}
Inner Classes
Static Inner Class
class A {
static class B {}
}
new A.B()
Anonymous Inner Class
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)
Reference
http://groovy-lang.org/differences.html
반응형
'Language > Groovy' 카테고리의 다른 글
Groovy 다운로드 및 사용 환경 구축 (Version 3.0.5) (0) | 2020.08.20 |
---|