다음 소스 코드는 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.이다.

 

  1. /*
  2.  *  Filename: testForFor.groovy
  3.  *
  4.  *  Execute:  groovy testForFor.groovy
  5.  *
  6.  *  Date:  2008. 3. 3.
  7.  */
  8. String[] getDan(int dan) {
  9.     def t = new String[19]
  10.     def sa, sb, sval
  11.     for (int j = 0; j < 19; j++) {
  12.         sa = "" + dan
  13.         if (sa.length() < 2)
  14.             sa = " " + sa
  15.         sb = "" + (j + 1)
  16.         if (sb.length() < 2)
  17.             sb = " " + sb
  18.         sval = "" + (dan*(j + 1))
  19.         if (sval.length() < 2)
  20.             sval = "  " + sval
  21.         else if (sval.length() < 3)
  22.             sval = " " + sval
  23.         t[j] = sa + " x " + sb + " = " + sval
  24.     }
  25.     return t
  26. }
  27. // 19단표를 모두 80컬럼 컨솔에 출력한다.
  28. def printAllNineteenDan() {
  29.     def arr = new String[18][19]
  30.     for (int i = 2; i < 20; i++) {
  31.         arr[i - 2] = getDan(i)
  32.     }
  33.     // 아래는 배열 대신 수정불가(immutable) 리스트를 사용하는 Groovy 코드이다.
  34.     def d = [ 2, 7, 11, 16 ].asImmutable()      // 각 줄단위 블럭의 첫단
  35.     def counter = [ 5, 4, 5, 4 ].asImmutable()  // 각 줄단위 블럭에 속한 단의 개수
  36.     def lines = new String[19]
  37.     for (int k = 0; k < d.size(); k++) {
  38.         // 80 바이트 길이의 한 줄씩 완성
  39.         for (int i = 0; i < 19; i++) {
  40.             lines[i] = arr[d[k]-2][i]
  41.             for (int j = 1; j < counter[k]; j++) {
  42.                 lines[i] += "   " +  arr[d[k]-2+j][i]
  43.             }
  44.         }
  45.         // 8-바이트 길이의 한 줄씩 출력
  46.         for (int i = 0; i < 19; i++) {
  47.             println(lines[i])
  48.         }
  49.         println()
  50.     }
  51. }
  52. 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




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Posted by Scripter
,