- 자바와 매끄럽게 통합 됨
- 그루비 코드는 JTE(Java Runtime Environment) 위에서 움직임
- jvm위에서 동작, 자바 라이브러리 사용
- jvm에게는 JAR 파일 하나가 필요한 자바 클래스
- 그루비 클래스나 자바 클래스 모두 같은 방식으로 인스턴스 만듦
- 그루비에서 자바 호출이 매우 쉬움
- 그루비 자료형은 모두 java.lang.Object 상속 받음
- 그루비 객체는 어떤 클래스의 인스턴스가 됨
- 자바에서 그루비 호출도 쉬움
- 그루비 클래스를 컴파일 → .class 파일로 만들어 클래스 패스에두면 자바에서 new 로 인스턴스 생성 가능
- 그루비에서 자바 호출이 매우 쉬움
- 그루비 코드는 JTE(Java Runtime Environment) 위에서 움직임
- 기능이 풍부한 언어
- 자바에 없는 특징
- 문법적 특징
- 그루비 라이브러리
- 자바 표준 라이브러리
- 파일 내용 출력 - 클로저와 추가된 입출력
- 클로저
- 코드블록
- 기본 객체처럼 다룰 수 있음
- 변수에 저장하거나 참조 전달도 가능
- 지정된 시점에 실행되도록 할 수 있음
- 자바에서는 익명클래스가 이런 역할을 종종 담당해옴
- 어댑터!
def number=0 new File('test.groovy').eachLine{ line -> number ++ println "$number: $line" }- 여기서 클로저란
- 클로저 : 함수와 그 함수가 선언될 때의 렉시컬 환경(변수들)을 함께 기억하는 객체
- 어떤 함수가 다른 함수 내부에 정의되고 그 내부 함수가 외부 함수의 지역 변수에 접근할 수 있을 때 내부 함수와 그 변수들이 함께 유지되는 현상
- 동작 원리
- 함수가 생성될 때 그 함수는 자신이 선언된 환경(스코프)에 대한 참조를 가짐
- 외부 함수가 종료되어도 내부 함수가 외부 함수의 변수에 접근하면 그 변수는 가비지 컬렉션 대상이 되지 않고 살아 남음
- 결과적으로 내부 함수가 외부 함수의 상태를 계속 읽거나 수정할 수 있는 것
- 활용 사례
- 데이터 은닉 : 객체지향의 private 처럼 외부에서 직접 변경할 수 없는 변수를 유지할 때
- 함수 팩토리(파라미터화 된 함수 생성) : 특정 설정을 캡쳐한 함수를 여러 개 만들 때
- 콜백/이벤트 핸들러 : 핸들러가 선언되던 시점의 상태를 기억해야 할 때
- 부분 적용/커링, 메모이제이션(캐시) : 상태를 유지하는 데 유용
- 유의할 점
- 메모리 유지 : 클로저가 오래 살아 남으면 메모리 누수
- 공유 상태의 부작용 : 동일한 외부 변수를 여러 클로저가 공유하면 의도치 않은 상태변경 발생 가능
- 디버깅 복잡
- 컬렉션 문법과 프로퍼티 접근의 용이
- 프로퍼티에 간단히 접근 가능
- 컬렉션 문법이 가능해서 컬렉션의 프로퍼티 접근도 쉬워짐
- 키워드를 사용할 수 도 있음 (작은 따옴표)
def classes = [String, List, Fime] for (clazz in classes) { println clazz.'package'.nam } // -> ["java.lang", "java.util", "java.io"] 출력 - GPath와 동적 프로퍼티 - XML
- XML문서도 그루비 빌더로 쉽게 만들 수 있음
- 클로저
- 자바에 없는 특징
[그루비] 그루비의 장점
2025. 11. 10. 15:27