'파이썬'에 해당되는 글 1건

  1. 2009.11.04 그루비에는 for 루프가 없나? 1
카테고리 없음2009. 11. 4. 16:31
사실 그루비나 루비모두 "for (i in list)" 같은 형식은 지원한다. 하지만 전통적인 C언어의 for 루프는 지원하지 않았었다. 처음 그루비 교과서를 들여다볼 때는 그게 상당히 불만스러웠다.

[code java]
// 이게 전통적인 for 루프.
for(int i =0 ; i< 10 ; i++) {}

// 이게 요즘 쓰는 루프
dataSet.eachXXX {} [/code]

너무 오래써온 문법이기 때문에 이걸 지원하지 않으면 꽤 불편할꺼라고 생각했었다. 하지만, 실무에서 써본 후에는 완전히 생각이 달라졌다.

each 를 설명하는 예제에는 흔히

[code groovy]
def list = [0, 1, 2, 3, 4]
list.each { n->
  print n
}
[/code]

같은 것들이 등장하곤 하는데, 사실 이런 것은 써본적 없다. 대신 최근 실무에서 사용하는 코드중에

[code groovy]
con.eachRow("select * from some_table order by id asc"){ rs ->
      println rs.al_subject;
 ....
}
[/code]

와 같은 것들이 있다. 레코드셋을 얻어다가, "각 레코드마다 돌면서 무슨 일인가를 한다." 라는 것이 그루비의 eachRow 가 하는 일이다.

익숙해지는데 두세시간 정도 걸린것 같은데, 그다음부터는 레코드셋만 보면 eachRow가 자동으로 나온다.

사실은.. 원래는.. 그렇게 사용할 때 가장 편리하게 쓸수 있는 녀석였던 것같다. 그외에도

[code groovy]
// HTML 파일과 쌍으로 있어야하는 JPG 파일이 없을 때...
// 고아가된 HTML파일을 지워버린다.
def p = ~/.*\.html/
def dirs = ['./dir1/', './dir2']

dirs.each { dir-> new File( dir ).eachFileMatch(p) { f ->
    def jpg = f.toString().replaceAll('html', 'jpg')
    if ( !(new File(jpg)).exists()) {
        f.delete()
    }
}}
[/code]

에서 each 처럼, 우리가 마주치는 대부분의 상황이 원래 for 루프보다 each를 쓰는 게 적절했음을, 계속 깨닫게 된다. 이건 그루비뿐만 아니라, 루비나, 파이썬을 써도 점점 익숙해지는 개념인 것 같다. (stl도 그렇다고 하면.. 그렇겠지만 ..)

참고 :
http://groovy.codehaus.org/Korean+Looping
http://mrhaki.blogspot.com/2009/09/groovy-goodness-looping-in-different.html


P.S. 처음에 그루비를 쓸때는 지원하지 않았었는데, 지금 테스트해보면 그동안 누가 요청을 했는지 어쨌는지, 고전적인 for루프를 지원한다.
Posted by jintopark

 

 
«이전  1  다음»