아래는 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 )에서 하기로 한다.
- /*
- * Filename: testForForApp.groovy
- *
- * Execute: groovy testForForApp.groovy
- *
- * Date: 2008. 3. 3.
- */
- public class TestForForApp {
- // static 선언자가 없으므로 이 메소드는 인스턴스 메소드이다.
- // 인스턴스 메소드는 static 메소드에서는 직접 호출되지 않는다.
- // 반드시 생성된 객체를 거쳐서 호출되어 진다.
- public String[] getDan(int dan) {
- String[] t = new String[19];
- String 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컬럼 컨솔에 출력한다.
- //
- // (static 선언자가 없는) 인스턴스 메소드이므로,
- // 반드시 생성된 객체를 거쳐서 호출되어 진다.
- public void printAllNineteenDan() {
- String[][] arr = new String[18][19];
- for (int i = 2; i < 20; i++) {
- arr[i - 2] = getDan(i);
- }
- // 아래 처럼 두 줄만 바꾸면 Groovy 애플리케이션이 된다.
- def d = [ 2, 7, 11, 16 ].asImmutable(); // 각 줄단위 블럭의 첫단
- def counter = [ 5, 4, 5, 4 ].asImmutable(); // 각 줄단위 블럭에 속한 단의 개수
- String[] lines = new String[19];
- for (int k = 0; k < d.size(); k++) {
- // 8-바이트 길이의 한 줄씩 완성
- 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];
- }
- }
- // 80 바이트 길이의 한 줄씩 출력
- for (int i = 0; i < 19; i++) {
- System.out.println(lines[i]);
- }
- System.out.println();
- }
- }
- // C 언어의 main 함수에 준하는 Java 언어의 스테틱 main 메소드
- public static void main(String[] args) {
- TestForForApp app = new TestForForApp(); // 객체를 생성한다.
- app.printAllNineteenDan(); // 객체에 속하는 메소드 printDan()을 호출한다.
- }
- }
실행> 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
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Groovy' 카테고리의 다른 글
조립제법(Horner의 방법) 예제 (1) for Groovy (0) | 2008.03.14 |
---|---|
80컬럼 컨솔에 19단표 출력하기 예제 (2) for Groovy (0) | 2008.03.03 |
Groovy 언어의 특징을 잘 나타내는 몇 가지 예제들 (0) | 2008.02.21 |
(최대공약수 구하기) while... 반복문 예제 for Groovy (0) | 2008.02.20 |
if...else... 조건문 사용 예제 for Groovy (0) | 2008.02.19 |