MAIN
여행
지식
낙서연구
Q&A
정보구름
 



L I N K S
KURAPA.COM MAPS
세고비아 길버드 Blog
홈미디어센타 X-Revo
고구마킬러 ㄲㅏㄲㅣ
DaDa의 원초적 잡화
아하! 무진장 알뜰정보
바조의 짜바스크립
일하는엄마 - 워킹맘
네이버,구글맵 지도 검색
세상을 살아가며 궁금한것들
CTICKET - 인생의 쿠폰
Super Coder's Page
똑똑한 검색 ReportBank
MSN Web Messenger
포토웤스(PHOTOWORKS)

믹시
Scouter for KURAPA.COM

0


Translator
Francais (French) Deutsch (German) Espanol (Spanish) Italiano (Italian) Portugues (Portugese) 日本語 (Japanese) 한국말 (Korean) ??中文 (Chinese) العربية (Arabic) Русский язык (Russian) English



> Q&A > Groovy
전체글 수: 12
요즘 뜬다는 그루비(Groovy)... 함께 심층 분석 해보세
그루비(Groovy) - 자바와의 차이점
2008-07-11 11:06:46


2008.5.13 translation & editing by gilbird

원문:http://groovy.codehaus.org/Differences+from+Java

 

그루비는 되도록 자바 개발자에게는 자연스럽게 와닿을 수 있도록 노력했다. 그루비를 설계할 때, 자바 배경지식을 가진 사람이 그루비를 학습한다고 하면 최소한의 차이점만을 느끼도록 한다는 원칙으로 만들었다.

다음은 자바그루비의 주요 차이점이다.

기본 import

아래 패키지와 클래스는 기본적으로 import되는 것들이다. 따라서, 명시적으로 import문으로 아래 패키지, 클래스를 적지 않아도 포함되어 있다.

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

일반적인 차이점

다음은 그루비를 시작하는 자바 개발자가 흔히 겪는 일들이다.

  • ==는 모든 형식에서 동등함을 의미한다. 자바에서는 이상하게도 ==가 기본형(primitive type)의 동등함은 물론 객체가 일치함을 뜻하기도 한다. 그루비에서는 오토박싱(autoboxing을 사용하므로 자바 개발자에게는 아주 혼란스러울 수도 있다. ( x==5는 x가 5라면 대부분 false일 것이다. 그래서 그루비에서는 ==는 equals()를 뜻한다.) 객체 일치가 필요하다면 foo.is(bar)와 같이 "is" 메서드를 사용하면 된다. 이 방식은 null에서는 동작하지 않지만 foo==null과 같이는 사용할 수 있다.
  • in은 키워드다. 따라서 변수명으로 사용하면 안된다.
  • 배열은 아래와 같이 선언하면 안된다.
    int[] a = {1,2,3};
    대신 아래와 같이 쓴다.
    int[] a = [1,2,3]
  • 아래과 같은 for 루프를 주로 썼다고 해보자.
    for (int i=0; i < len; i++) {...}
    그루비에서는 위와 같이 쓸 수 있다. 하지만 아래와 같이 하나의 카운트 변수만을 사용할 수도 있다.
    for (i in 0..len-1) {...}
    for (i in 0..<len) {...}
    len.times {...}

주의할 점

  • 세미콜론은 선택사항이다. 취향에 따라 사용하면 된다. (하지만 2개 이상의 명령문을 사용할 때에는 넣어야 한다.)
  • return 키워드는 선택사항이다.
  • this 키워드를 (this 클래스를 참조하는) 정적 메서드에서 사용할 수 있다.
  • 메서드와 클래스는 기본적으로 public이다.
  • 그루비의 protected는 자바의 protected와 같은 의미이다. 즉, 동일한 패키지와 상속한 클래스에서 protected 멤버를 액세스할 수 있다.
  • Inner 클래스는 지원하지 않는다. 대신 클로져를 사용하기 바란다.
  • 메소드 식의 throw 절은 그루비 컴파일러에서 검사하지 않는다.
  • 자바에서의 undefined members 혹은 인자 형식 오류 등에 대하여 컴파일 오류가 발생하지 않을 것이다.
    런타임 vs 컴파일타임, 정적 vs 동적 글을 참고하기 바란다.

특별한 차이점

자바 프로그래머는 명령어 종료로 세미콜론(;)을 사용하며 클로져는 쓰지 않는다. 또한 클래스 정의에서 인스턴스 초기화를 한다. 아래 코드를 보기 바란다.

class Trial {
private final Thing thing = new Thing ( ) ;
{ thing.doSomething ( ) ; }
}

많은 그루비 프로그래머는 세미콜론을 사용하면 산만하고 중복이 많아 쓰길 꺼려 한다. (하지만 어떤 사람들은 항상 사용한다. 코딩스타일에 따라 다르다.) 위 코드를 아래와 같이 쓰면 문제가 생긴다.

class Trial {
private final thing = new Thing ( )
{ thing.doSomething ( ) }
}

위 코드는 MissingMethodException이 throw될 것이다.

이 상황에서의 문제는 줄바꿈(newline)은 명령 종결자가 아니라서 다름 블록을 클로져로 인식하여 Thing 생성자에 인자를 전달해 버린다. 이상하게 느껴지겠지만 사실이다. 의도한 방식으로 인스턴스를 초기화 하고 싶다면 세미콜론을 사용하는 것이 필수적이다.

class Trial {
private final thing = new Thing ( ) ;
{ thing.doSomething ( ) }
}

위 코드의 초기화 정의 다음 블록은 확실히 인스턴스 초기화를 수행한다.

다른 문서에서 알아야 할 몇가지 함정과 회피하기 위한 최선의 예를 참고하기 바란다.

자바에서는 사용 불가능한 그루비에 추가된 새로운 기능

  • 클로져
  • 리스트와 맵에 대한 네이티브 문법
  • GroovyMarkup, GPath 지원
  • 정규식에 대한 네이티브 지원
  • 여러가지 모양의 iteration과 강력한 switch문
  • 동적, 정적 형식을 지원함으로써 메서드, 필드, 변수의 형식을 생략해도 됨
  • 문자열 안에 식을 넣을 수 있음
  • JDK에 수많은 헬퍼 메서드가 추가됨
  • 빈(bean)의 속성을 쓰고 이벤트 리스너를 추가하는데 간단한 문법
  • ?. 연산자를 이용한 안전한 액세스. 예를 들면 "variable?.field"와 "variable?.method()"로 더이상 중첩루프 덩어리를 만들어 널체크를 안해도 됨


태그 : 그루비 , 자바
추천 : 0, 조회 : 337
코멘트 0 | 트랙백 0 | 첨부파일 1
글자의 색상을 지정합니다 글자의 배경색상을 지정합니다
글자를 진하게 합니다 글자를 기울이게 합니다 밑줄을 긋습니다 취소선을 긋습니다
link를 만듭니다 이미지를 추가합니다 동영상/플래쉬등을 추가합니다 html 코드를 직접 입력합니다
이모티콘을 추가합니다 글박스를 만들거나 글숨김 기능을 추가합니다 html 코드를 직접 입력합니다
html모드로 변환합니다.
 
번호
제목
글쓴이
일자
추천
조회
12
2008-08-04
0
478
11
2008-07-11
0
1,410
10
2008-07-11
0
338
9
2008-07-11
0
330
8
2008-07-11
0
324
7
2008-07-11
0
303
6
2008-07-11
0
292
5
2008-07-11
0
639
4
2008-07-11
0
300
3
2008-07-11
0
384
2
2008-03-29
0
609
1
2008-03-28
0
470


 
Copyright 2000-2008 KURAPA.COM All Rights Reserved.