다음 소스 코드는 80컬럼 컨솔에 19단표 출력하기 예제 (1) for Groovy 에 올려진 Groovy 소스 코드를 더 Groovy 소스 코드 답게 고친 것이다.
Java 문법은 모든 구문에서 문장의 끝은 세미콜론(;)을 붙이게 되어 있다.
그러나 Groovy 문법은 문장의 끝을 알리는 세미콜론(;)을 붙여도 되고 안븉여도 된다.
(단, 동일한 줄에 여러 개의 문장이 들어갈 때는 문장과 문장을 구별하는 세미콜론(;)을 사이사이에 넣어야 한다.)
즉, 문장의 끝을 알리는 세미콜론(;) 붙이기는 사용자의 개별 취향에 맡기는 옵션이다.(신택스 슈가, syntax sugar)
함수나 변수의 선언시에 Java 구문처럼 타입을 지정해도 되지만, 타입 대신 단지 def를 함수명이나 변수명 앞에 붙여도 된다. 이렇게 하는 이유는 함수의 라턴 값이나 변수가 참조하는 값에 대하여 타입의 융통성을 주기 위함이다. 바로 이 이유 때문에 언어를 소개할 때 Java 언어는 타입이 엄격한 언어(strictly typed language)라고 하고, Groovy 언어는 타입이 동적인 언어(dynamic language)라고 한다.
Groovy 언어에서는 args가 특별하게 쓰이는 예약어로 되어 있다.
main 메소드가 아닌 곳이라도 변수 선언 없이 쓸 수 있는 args는 명령행 실행시 옵션으로 붙인 스트링 값들을 갖고 있는 String[] 타입의 객체의 참조자로 예약되어 있다.
아래의 소스 코드에서 사용된 for 구문은 Java 언어의 for 구문과 완전히 똑 같다.
이는 Groovy 1.0 에서는 없던 구문이지만 Groovy 1.5 부터는 지원되는 구문이다.
그러므로 아래의 Groovy 소스 코드를 실행시키려면 반드시 Groovy 1.5 이상을 써야 한다.
이 글을 쓰는 현재 Groovy의 최신 버전을 1.5.4.이다.
- /*
- * Filename: testForFor.groovy
- *
- * Execute: groovy testForFor.groovy
- *
- * Date: 2008. 3. 3.
- */
- String[] getDan(int dan) {
- def t = new String[19]
- def sa, sb, sval
- for (int j = 0; j < 19; j++) {
- sa = "" + dan
- if (sa.length() < 2)
- sa = " " + sa
- sb = "" + (j + 1)
- if (sb.length() < 2)
- sb = " " + sb
- sval = "" + (dan*(j + 1))
- if (sval.length() < 2)
- sval = " " + sval
- else if (sval.length() < 3)
- sval = " " + sval
- t[j] = sa + " x " + sb + " = " + sval
- }
- return t
- }
- // 19단표를 모두 80컬럼 컨솔에 출력한다.
- def printAllNineteenDan() {
- def arr = new String[18][19]
- for (int i = 2; i < 20; i++) {
- arr[i - 2] = getDan(i)
- }
- // 아래는 배열 대신 수정불가(immutable) 리스트를 사용하는 Groovy 코드이다.
- def d = [ 2, 7, 11, 16 ].asImmutable() // 각 줄단위 블럭의 첫단
- def counter = [ 5, 4, 5, 4 ].asImmutable() // 각 줄단위 블럭에 속한 단의 개수
- def lines = new String[19]
- for (int k = 0; k < d.size(); k++) {
- // 80 바이트 길이의 한 줄씩 완성
- for (int i = 0; i < 19; i++) {
- lines[i] = arr[d[k]-2][i]
- for (int j = 1; j < counter[k]; j++) {
- lines[i] += " " + arr[d[k]-2+j][i]
- }
- }
- // 8-바이트 길이의 한 줄씩 출력
- for (int i = 0; i < 19; i++) {
- println(lines[i])
- }
- println()
- }
- }
- printAllNineteenDan()
실행> groovy testForFor.groovy
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 2 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 = 50 6 x 10 = 60 2 x 11 = 22 3 x 11 = 33 4 x 11 = 44 5 x 11 = 55 6 x 11 = 66 2 x 12 = 24 3 x 12 = 36 4 x 12 = 48 5 x 12 = 60 6 x 12 = 72 2 x 13 = 26 3 x 13 = 39 4 x 13 = 52 5 x 13 = 65 6 x 13 = 78 2 x 14 = 28 3 x 14 = 42 4 x 14 = 56 5 x 14 = 70 6 x 14 = 84 2 x 15 = 30 3 x 15 = 45 4 x 15 = 60 5 x 15 = 75 6 x 15 = 90 2 x 16 = 32 3 x 16 = 48 4 x 16 = 64 5 x 16 = 80 6 x 16 = 96 2 x 17 = 34 3 x 17 = 51 4 x 17 = 68 5 x 17 = 85 6 x 17 = 102 2 x 18 = 36 3 x 18 = 54 4 x 18 = 72 5 x 18 = 90 6 x 18 = 108 2 x 19 = 38 3 x 19 = 57 4 x 19 = 76 5 x 19 = 95 6 x 19 = 114 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9 10 x 1 = 10 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18 10 x 2 = 20 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27 10 x 3 = 30 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36 10 x 4 = 40 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54 10 x 6 = 60 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63 10 x 7 = 70 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72 10 x 8 = 80 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81 10 x 9 = 90 7 x 10 = 70 8 x 10 = 80 9 x 10 = 90 10 x 10 = 100 7 x 11 = 77 8 x 11 = 88 9 x 11 = 99 10 x 11 = 110 7 x 12 = 84 8 x 12 = 96 9 x 12 = 108 10 x 12 = 120 7 x 13 = 91 8 x 13 = 104 9 x 13 = 117 10 x 13 = 130 7 x 14 = 98 8 x 14 = 112 9 x 14 = 126 10 x 14 = 140 7 x 15 = 105 8 x 15 = 120 9 x 15 = 135 10 x 15 = 150 7 x 16 = 112 8 x 16 = 128 9 x 16 = 144 10 x 16 = 160 7 x 17 = 119 8 x 17 = 136 9 x 17 = 153 10 x 17 = 170 7 x 18 = 126 8 x 18 = 144 9 x 18 = 162 10 x 18 = 180 7 x 19 = 133 8 x 19 = 152 9 x 19 = 171 10 x 19 = 190 11 x 1 = 11 12 x 1 = 12 13 x 1 = 13 14 x 1 = 14 15 x 1 = 15 11 x 2 = 22 12 x 2 = 24 13 x 2 = 26 14 x 2 = 28 15 x 2 = 30 11 x 3 = 33 12 x 3 = 36 13 x 3 = 39 14 x 3 = 42 15 x 3 = 45 11 x 4 = 44 12 x 4 = 48 13 x 4 = 52 14 x 4 = 56 15 x 4 = 60 11 x 5 = 55 12 x 5 = 60 13 x 5 = 65 14 x 5 = 70 15 x 5 = 75 11 x 6 = 66 12 x 6 = 72 13 x 6 = 78 14 x 6 = 84 15 x 6 = 90 11 x 7 = 77 12 x 7 = 84 13 x 7 = 91 14 x 7 = 98 15 x 7 = 105 11 x 8 = 88 12 x 8 = 96 13 x 8 = 104 14 x 8 = 112 15 x 8 = 120 11 x 9 = 99 12 x 9 = 108 13 x 9 = 117 14 x 9 = 126 15 x 9 = 135 11 x 10 = 110 12 x 10 = 120 13 x 10 = 130 14 x 10 = 140 15 x 10 = 150 11 x 11 = 121 12 x 11 = 132 13 x 11 = 143 14 x 11 = 154 15 x 11 = 165 11 x 12 = 132 12 x 12 = 144 13 x 12 = 156 14 x 12 = 168 15 x 12 = 180 11 x 13 = 143 12 x 13 = 156 13 x 13 = 169 14 x 13 = 182 15 x 13 = 195 11 x 14 = 154 12 x 14 = 168 13 x 14 = 182 14 x 14 = 196 15 x 14 = 210 11 x 15 = 165 12 x 15 = 180 13 x 15 = 195 14 x 15 = 210 15 x 15 = 225 11 x 16 = 176 12 x 16 = 192 13 x 16 = 208 14 x 16 = 224 15 x 16 = 240 11 x 17 = 187 12 x 17 = 204 13 x 17 = 221 14 x 17 = 238 15 x 17 = 255 11 x 18 = 198 12 x 18 = 216 13 x 18 = 234 14 x 18 = 252 15 x 18 = 270 11 x 19 = 209 12 x 19 = 228 13 x 19 = 247 14 x 19 = 266 15 x 19 = 285 16 x 1 = 16 17 x 1 = 17 18 x 1 = 18 19 x 1 = 19 16 x 2 = 32 17 x 2 = 34 18 x 2 = 36 19 x 2 = 38 16 x 3 = 48 17 x 3 = 51 18 x 3 = 54 19 x 3 = 57 16 x 4 = 64 17 x 4 = 68 18 x 4 = 72 19 x 4 = 76 16 x 5 = 80 17 x 5 = 85 18 x 5 = 90 19 x 5 = 95 16 x 6 = 96 17 x 6 = 102 18 x 6 = 108 19 x 6 = 114 16 x 7 = 112 17 x 7 = 119 18 x 7 = 126 19 x 7 = 133 16 x 8 = 128 17 x 8 = 136 18 x 8 = 144 19 x 8 = 152 16 x 9 = 144 17 x 9 = 153 18 x 9 = 162 19 x 9 = 171 16 x 10 = 160 17 x 10 = 170 18 x 10 = 180 19 x 10 = 190 16 x 11 = 176 17 x 11 = 187 18 x 11 = 198 19 x 11 = 209 16 x 12 = 192 17 x 12 = 204 18 x 12 = 216 19 x 12 = 228 16 x 13 = 208 17 x 13 = 221 18 x 13 = 234 19 x 13 = 247 16 x 14 = 224 17 x 14 = 238 18 x 14 = 252 19 x 14 = 266 16 x 15 = 240 17 x 15 = 255 18 x 15 = 270 19 x 15 = 285 16 x 16 = 256 17 x 16 = 272 18 x 16 = 288 19 x 16 = 304 16 x 17 = 272 17 x 17 = 289 18 x 17 = 306 19 x 17 = 323 16 x 18 = 288 17 x 18 = 306 18 x 18 = 324 19 x 18 = 342 16 x 19 = 304 17 x 19 = 323 18 x 19 = 342 19 x 19 = 361
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Groovy' 카테고리의 다른 글
조립제법(Horner의 방법) 예제 (2) for Groovy (0) | 2008.03.14 |
---|---|
조립제법(Horner의 방법) 예제 (1) for Groovy (0) | 2008.03.14 |
80컬럼 컨솔에 19단표 출력하기 예제 (1) for Groovy (0) | 2008.03.03 |
Groovy 언어의 특징을 잘 나타내는 몇 가지 예제들 (0) | 2008.02.21 |
(최대공약수 구하기) while... 반복문 예제 for Groovy (0) | 2008.02.20 |