본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 열번째 날입니다.
아홉번째 날에는 테스트 더블에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 2. 채팅 뼈대 프로젝트 개발 > Ch 1. 테스트에 대한 이야기 >
03. Spock 사용을 위한 Groovy 소개
입니다.
🧪 Spock을 위한 준비: Groovy 언어 소개
- 이번 시간에는 Spock 테스트 프레임워크를 사용하기 위해 필수적으로 알아야 할 Groovy 언어에 대해 알아보는 시간을 가졌습니다. Groovy는 Java와 매우 유사하지만, 테스트 코드 작성에 최적화된 유연하고 간결한 문법을 제공합니다. 이 포스팅에서는 Groovy의 특징과 Java와의 차이점을 중심으로 설명하고, 실습에서는 Spock을 사용하는 데 필요한 문법만 골라 다뤄볼 예정입니다.
☕ Groovy의 탄생과 역사
- Groovy는 2007년에 1.0 정식 버전이 릴리스된, 비교적 오래된 언어입니다. 하지만 꾸준히 발전을 이어오고 있으며, 2021년에는 Groovy 4.0 버전이 공개되었습니다. 최신 Java 문법을 전부 지원하는 건 아니지만, Java 17부터 등장한 Record 클래스 등 일부 기능은 4.0부터 지원합니다.
실무에서 Gradle 빌드 스크립트나 Jenkins 파이프라인 등 다양한 곳에서 이미 Groovy 문법이 널리 사용되고 있어 친숙한 분들도 계실 것입니다.
🔄 Java와의 호환성
- Groovy는 Java와 매우 높은 호환성을 가지고 있어서, 대부분의 Java 코드가 그대로 작동합니다. 기존에 익숙한 Java 표준 라이브러리도 동일하게 활용할 수 있기 때문에, Java 개발자라면 빠르게 익숙해질 수 있습니다. 하지만 완전히 동일하진 않습니다.
- 예를 들어:
- Groovy는 동적 타입 언어로, 타입을 명시하지 않아도 됩니다.
- Java의 var는 정적 타입 추론을 사용하는 반면, Groovy의 def는 동적 타이핑을 제공합니다.
- def는 메서드 파라미터, 반환 타입, 필드 등 모든 곳에서 사용할 수 있습니다.
- Java에서는 var가 지역 변수에만 사용 가능한 것과 대조됩니다.
✨ Groovy의 간결한 문법
- Groovy는 테스트 코드 작성에 정말 최적화된 언어입니다. 다음과 같은 문법적 편리함을 제공합니다.
- 세미콜론(;) 생략 가능
- Getter/Setter 자동 생성
- 리스트와 맵을 기본 문법으로 지원
- 다른 타입을 혼합한 컬렉션 생성 가능
- 연산자도 메서드 호출로 처리되며, 오버로딩 가능
def list = [1, 2, 3]
def map = [name: "개발러버", age: 30, active: true]
- 심지어 기본 타입도 모두 객체로 취급되고, 연산자 역시 메서드로 전환되기 때문에 모든 것이 객체라는 철학을 고스란히 반영하고 있습니다.
🔁 클로저와 커링(Closure & Currying)
- Groovy의 핵심 기능 중 하나는 바로 클로저(Closure) 입니다. Java와 달리 Groovy는 함수를 1급 객체로 취급합니다.
- 함수를 변수에 할당 가능
- 함수를 파라미터로 전달하거나 리턴 가능
- 클로저 내부에서 외부 변수 참조도 가능
- 또한 Groovy는 커링(currying)도 지원합니다. 이는 함수의 일부 인자를 고정한 새 함수를 만들어내는 기법으로, 고차 함수 기반의 유연한 프로그래밍이 가능합니다.
- 커링에 대한 개념은 추후 문법 실습에서 직접 다뤄볼 예정입니다.
🛠️ 실무에서 Groovy가 쓰이는 예시
- 이미 많은 프로젝트에서 Groovy는 다음과 같은 곳에 사용되고 있습니다.
- build.gradle 스크립트 작성 (Gradle 기본 스크립트 언어)
- Jenkins 파이프라인 DSL
- Spock 기반 테스트 코드
- DSL(Domain Specific Language) 도입 사례
- 특히 Groovy는 DSL 작성에 최적화되어 있어, Spock의 Given-When-Then 구조처럼 읽기 쉬운 테스트 코드를 작성하는 데 매우 유리합니다.
- Groovy는 처음엔 Java보다 낯설고 느슨해 보여 약간 불안했지만, 테스트 목적이라면 이 정도의 유연함은 오히려 코드의 명확성과 생산성을 높이는 데 큰 도움이 될 수 있다는 생각이 들었습니다.
- 사실 Groovy 전체 문법을 다 익힐 필요는 없고, Spock에서 자주 쓰는 구문만 익혀도 충분할 것 같습니다. 앞으로의 실습에서 필요한 만큼만 간결하게 익혀가며, 테스트를 ‘생산적 도구’로 만드는 경험을 쌓아가야겠습니다.
다음 포스팅에서는 Groovy Console 이 무엇인지 알아보는 시간을 갖도록 하겠습니다.