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

+ Recent posts