아래는 Java용 소스파일 TestForForApp.java 를 (최소한의 수정으로) Groovy용으로 고친 것이다. 배열(array)을 생성하는 문법에 있어 Java 코드와 Groovy 코드가 서로 다르기 때문이다.

예를 들어, 정수 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 을 갖고 있는 int[] 타입의 배열을 생성하여
변수 arr에 저장하는(참조자 arr이 이를 참조하게 하는) Java 문법은

        int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

이다. 하지만 이에 대응하는 Groovy 문법은

        int[] arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] as int[];

이다. 즉. Groovy 문법은 리스트를 생성시켜서 as int[] 라는 구문으로 타입변환한 다음 참조자 arr이 생성된 이 배열을 참조하도록 한다.

그러나 Groovy 언어에서는 배열(array)의 사용을 권하지 않는다. 배열 보다는 리스트를 사용 하는 것이 훨씬 효율적이다. 때로는 수정가능(mutable) 리스트 보다 수정불가(immutable) 리스트가 필요할 때가 있다. 이때는 Groovy 에서 지원하는 리스트의 asImmuable() 이라는 객체 메소드를 써서 리스트의 속성을 바꾸면 된다. 그래서 위의 Groovy 코드 보다는

        def arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ].asImmutable();

로 하는 것이 더 Groovy 다운 Groovy 코드이다. 이와 유사한 Groovy 코드가 아래의 소스 코드 중에 두 줄 있을 것이다. 바로 그 두 줄만 자바소스파일 TestForForApp.java로 부터 수정되었다.

하지만 이 두 줄의 수정 만으로는 아직 소스 전체가 Groovy 소스 코드 답지 않고 Java 소스 코드의 모습을 그대로 간직하고 있다. 구문을 Groovy 소스 코드 답게 더 고치는 일은 다음
에 (   80컬럼 컨솔에 19단표 출력하기 예제 (2) for Groovy )에서 하기로 한다.



  1. /*
  2.  *  Filename: testForForApp.groovy
  3.  *
  4.  *  Execute:  groovy testForForApp.groovy
  5.  *
  6.  *  Date:  2008. 3. 3.
  7.  */
  8. public class TestForForApp {
  9.     // static 선언자가 없으므로 이 메소드는 인스턴스 메소드이다.
  10.     // 인스턴스 메소드는 static 메소드에서는 직접 호출되지 않는다.
  11.     // 반드시 생성된 객체를 거쳐서 호출되어 진다.
  12.     public String[] getDan(int dan) {
  13.         String[] t = new String[19];
  14.         String sa, sb, sval;
  15.         for (int j = 0; j < 19; j++) {
  16.             sa = "" + dan;
  17.             if (sa.length() < 2)
  18.                 sa = " " + sa;
  19.             sb = "" + (j + 1);
  20.             if (sb.length() < 2)
  21.                 sb = " " + sb;
  22.             sval = "" + (dan*(j + 1));
  23.             if (sval.length() < 2)
  24.                 sval = "  " + sval;
  25.             else if (sval.length() < 3)
  26.                 sval = " " + sval;
  27.             t[j] = sa + " x " + sb + " = " + sval;
  28.         }
  29.         return t;
  30.     }
  31.     // 19단표를 모두 80컬럼 컨솔에 출력한다.
  32.     //
  33.     // (static 선언자가 없는) 인스턴스 메소드이므로,
  34.     // 반드시 생성된 객체를 거쳐서 호출되어 진다.
  35.     public void printAllNineteenDan() {
  36.         String[][] arr = new String[18][19];
  37.         for (int i = 2; i < 20; i++) {
  38.             arr[i - 2] = getDan(i);
  39.         }
  40.         // 아래 처럼 두 줄만 바꾸면 Groovy 애플리케이션이 된다.
  41.         def d = [ 2, 7, 11, 16 ].asImmutable();      // 각 줄단위 블럭의 첫단
  42.         def counter = [ 5, 4, 5, 4 ].asImmutable();  // 각 줄단위 블럭에 속한 단의 개수
  43.         String[] lines = new String[19];
  44.         for (int k = 0; k < d.size(); k++) {
  45.             // 8-바이트 길이의 한 줄씩 완성
  46.             for (int i = 0; i < 19; i++) {
  47.                 lines[i] = arr[d[k]-2][i];
  48.                 for (int j = 1; j < counter[k]; j++) {
  49.                     lines[i] += "   " +  arr[d[k]-2+j][i];
  50.                 }
  51.             }
  52.             // 80 바이트 길이의 한 줄씩 출력
  53.             for (int i = 0; i < 19; i++) {
  54.                 System.out.println(lines[i]);
  55.             }
  56.             System.out.println();
  57.         }
  58.     }
  59.     // C 언어의 main 함수에 준하는 Java 언어의 스테틱 main 메소드
  60.     public static void main(String[] args) {
  61.         TestForForApp app = new TestForForApp();  // 객체를 생성한다.
  62.         app.printAllNineteenDan();    // 객체에 속하는 메소드 printDan()을 호출한다.
  63.     }
  64. }



실행> groovy testForForApp.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
,