# 변수 선언과 값 할당
- 동적 타입 바인딩
def a = 20 //값을 할당할 때 a 변수의 타입이 결정됨
a = "문자열" //다른 값을 할당하면 변수의 타입이 바뀜
b = "문자열" //변수 선언 시 def를 생략해도 됨
- 정적 타입 바인딩
int a = 20 //변수 a는 int로 데이터형이 고정됨
a = "문자열" //문자열 값을 할당하면 오류 발생!
- 문자열과 자동 형변환
String a = "문자열" //변수 a는 String으로 데이터 형이 고정됨
a = 20 //정수 값 20이 문자열 "20"으로 자동 변환된 후 변수 a에 할당됨
- 자바 변수 선언
java.util.Date a = new java.util.Date() //자바 문법 사용 가능
Date b = new Date() //기본으로 java.util 패키지 임포트됨
# 리스트와 맵 데이터 다루기
- 리스트 데이터 할당과 사용
scoreList = [90, 80, 100, 87] //ArrayList 객체가 생성됨
println scoreList[2] //배열처럼 사용할 수 있음
println scoreList.get(2) //원래대로 ArrayList의 get() 호출 가능
println scoreList.size() //결과는 4
nameList = ["홍길동", "임꺽정", "장보고"]
println nameList[1]
emptyList = [] //빈 리스트 생성
- 맵 데이터 할당과 사용
scoreMap = ["국어":100, "영어":90, "수학":100, "사회":89]
println scoreMap["수학"] //변수["키"] 형태로 값 추출
println scoreMap.수학 //변수.키 형태로 값 추출
println scoreMap.getClass() //java.util.LinkedHashMap 출력
scoreMap.수학 = 93 //맵의 값 변경
println scoreMap.수학 //결과는 93
emptyMap = [:] //빈 맵 생성
# 분기문
- if - else문
if(true 또는 false 조건) {
...
}else if(...) {
...
}else {
...
}
- 조건 연산자
age = 17
title = (age < 19) ? "청소년" : "성인"
- switch문
x = "aaa"
result = ""
switch(x) {
case "aaa" : result = "aaa"
case "123" : result += "123"
case [1, 20, 3.14, true] :
result = "숫자, 문자열, 참거짓 값"
break
case 100...200 : result = "100~200 값"; break
case Number : result = "기타 숫자 값"; break
default : result = "기타"
}
println result
그루비의 switch문은 자바와 달리 숫자나 문자열 외에 실수, 불린, 객체도 다룰 수 있다.
# 반복문
- while문
while(조건) {...}
- for문
for(int i=0 ; i < 5 ; i++) {}
for(i in 0..9) {}
for(i in [100, 90, 95, 80]) {}
for(i in 배열) {}
for(entry in 맵) {}
for(c in 문자열) {}
- for문 예제
맵 = ['kor':100, 'eng':90, ...]
for(e in 맵) {
println e.key + "=" + e.value
}
for(v in 맵.values()) {
println v
}
for(c in "abcdef") {
print c + ","
}
- eachXXX()
목록.each({...})
맵.each({key, value -> ...})
목록.eachWithIndex({obj, i -> ...})
맵.eachWithIndex({obj, i -> ...})
# 메서드와 클로저
- 메서드 정의
def plus(a, b) {
a + b
}
int minus(int a, int b) {
return a - b
}
- 클로저 정의
plus = {a, b ->
a + b
}
println plus(10, 20)
plus = {int a, int b ->
return a + b
}
- 클로저 Free 변수
pi = 3.14159
getCircleArea = {radius ->
//pi는 'free' 변수
pi * radius * radius
}
- 클로저 it 파라미터
plus = {
it[0] + it[1]
}
println plus([10, 20])
- 클로저 리턴 값
plus = {a, b ->
a + b //마지막 문장의 실행값
}
//return을 사용해도 됨
//마지막 문장의 실행값이 없으면 null
# 클래스
- 기본으로 임포트(import) 하는 패키지
java.lang, java.io, java.math, java.net, java.util, groovy.lang, groovy.util
- 클래스 정의와 사용
class Test {
void hello() {
println "안녕하세요!"
}
}
t = new Test()
t.hello()
- 프로퍼티 선언과 사용
class Student {
Integer no
String name
Date regDate
}
s = new Student(no:1, name:"홍길동", regDate:new Date())
println s.no + "," + s.name + "," + s.regDate
# String과 GString
- 문자열 표현 ",',/
println "I like 'groovy'."
println 'I like "groovy".'
println (/ I like "groovy"./)
- 멀티 라인 문자열
intro = """ Hi, My name is S.
I am learning Groovy script.
Let's go Groovy programming."""
println intro
- GString
name = "Jinsung"
println "Hi, $name."
println "Hi, \$name."
- GString과 String
str1 = "Jinsung"
str2 = "My name is $str1"
str3 = str1 + str2
assert str1 instanceof String
assert str2 instanceof GString
assert str3 instanceof String
- GString과 Closure
now = new Date()
str1 = "일반객체: $now 입니다."
str2 = "파라미터 없는 클로저: ${new Date()}"
str3 = "파라미터 있는 클로저: ${writer -> writer << new Date()}"
그루비에 대한 자세한 사항은 https://groovy-lang.org/ 사이트에 방문하여 확인한다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
125. 스프링 IoC 컨테이너 사용 준비 (2) (0) | 2022.10.03 |
---|---|
124. 스프링 IoC 컨테이너 도입부 및 스프링 IoC 컨테이너 사용 준비 (1) (0) | 2022.10.02 |
122. Groovy (0) | 2022.09.29 |
121. Gradle (1) | 2022.09.27 |
120. 퍼시스턴스 프레임워크의 도입 정리 (0) | 2022.09.26 |
댓글