공부해봅시당
[CS 기초] Groovy란? 본문
Groovy
Junit5 기반이며 Java와 비슷해서 어렵지 않다고 함
(Junit5: Java용으로 가장 널리 사용되는 테스트 프레임워크 중 하나)
Groovy가 개발된 이유
Java의 특성을 기반으로 하면서도 더 간결하고 표현력 있게 코드를 작성할 수 있는 언어를 만들기 위함
1. 간결성과 표현력
Groovy는 Java의 장황함을 줄이고 더 간결하며 표현력 있는 코드를 작성할 수 있게 하는 것을 목표로 함
Java는 강력하고 안정적인 언어로 잘 알려져 있지만, 때로는 장황하고 불필요한 부분이 많을 수 있음
2. 스크립트 언어의 필요성
Groovy 언어가 생겨날 당시, 스크립트 언어들의 인기와 활용도가 높아져 있었음
Java 플랫폼 위에서 쉽게 동작하는 스크립트 언어의 필요성이 느껴짐
Groovy는 이런 필요성을 충족시켜, 빠르게 프로토타입을 만들거나 작은 스크립트를 작성하는 데 유용하게 사용 가능
3. Java와의 호환성
Java는 그 당시 이미 널리 사용되고 있던 언어임
따라서 Java와 완벽하게 호환되면서도 그 위에서 동작하는 새로운 언어의 필요성 대두
Groovy는 Java 코드와 통합 가능, Java의 라이브러리와 프레임워크 그대로 활용 가능
4. 동적 언어의 장점 활용
동적 언어의 장점을 Java 플랫폼에서 활용하고자 하는 동기도 있었음
동적 타이밍, 메타프로그래밍 등의 특징은 개발의 유연성을 높여줌
특히 메타프로그래밍은 도메인 특화 언어(DSL)을 만드는 데 유용함
따라서 Groovy는 Java 개발자들 사이에서 인기를 얻고, Gradle 같은 프로젝트에서 주요 스크팁트 언어로 선택됨
Groovy 특징
1. Java 호환성
Groovy 코드는 Java 코드와 함께 쉽게 통합 가능
Java의 라이브러리와 프레임워크 그대로 사용 가능
2. 동적 타이핑(==동적 언어)
정적 타이핑(==정적 언어)과 동적 타이핑(==동적 언어) 모두 지원
3. 스크립트 언어
스크립트 언어로서의 능력도 있음
간단한 스크립트 작성부터 복잡한 어플리케이션 개발까지 다양한 범위에서 사용 가능
4. 강력한 문자열 처리
문자열 처리와 정규 표현식에 대한 강력한 기능을 제공
5. DSL(Domain-Specific Language) 지원
DSL을 쉽게 생성하고 사용할 수 있어, 특정 도메인에 특화된 언어를 만드는 데 유리
6. 클로저
람다와 유사한 클로저 지원, 코드의 재사용성과 간결성 높일 수 있음
장단점
장점
생산성 향상
Groovy의 간결한 문법과 편의 기능들로 인해 개발자의 생산성이 향상될 수 있음
Java와의 간편한 통합
기존의 Java 코드와의 통합이 용이하므로, Java 프로젝트에 Groovy를 점진적으로 도입하는 것이 용이
Gradle과의 연계
Groovy는 빌드 도구인 그레이들의 기본 스크립팅 언어로 사용되며, 이를 통해 프로젝트의 빌드 및 배포 과정을 간편하게 관리할 수 있음
풍부한 라이브러리와 프레임워크 지원
Groovy는 Grails와 같은 웹 프레임워크를 포함하여 다양한 라이브러리와 프레임워크를 지원
단점
성능
동적 타이핑과 다른 동적 기능들 때문에 Java에 비해 상대적으로 느릴 수 있음
하지만 최근 버전의 Groovy는 성능 향상에 중점을 둔 개선 작업을 지속적으로 진행하고 있음
학습 곡선
Java 개발자들에게는 친숙할 수 있지만, Groovy만의 특징과 문법을 익히는 데에는 약간의 학습 시간이 필요할 수 있음
채택도
Java, Kotlin 등과 비교했을 때, Groovy는 상대적으로 채택도가 낮을 수 있음
따라서 개발자 커뮤니티와 자료의 양이 다소 적을 수 있음
'STUDY > CS' 카테고리의 다른 글
[CS] UML(Unified Modeling Language) 관계 (1) | 2024.02.14 |
---|---|
[CS] '명령형' 프로그래밍 vs '선언적' 프로그래밍 (1) | 2024.02.12 |
[CS 기초] 고차함수 (2) | 2023.11.06 |
[CS 기초] 정적 스코프(Static Scope) vs 동적 스코프(Dynamic Scope) (0) | 2023.11.06 |
[CS 기초] 렉시컬 스코프, 스코프 체인, 클로저의 관계 (1) | 2023.11.06 |