Java는 성숙하고 검증되어 있고 (Java를 싫어하는 사람들은 여전히 이의를 제기하겠지만) 빠릅니다. 하지만 장황하기도 합니다. Java에서 Ruby로 전환하면 코드량이 상당히 적어질 것입니다. 또 빠르게 프로토타입을 만들 때 시간이 적게 걸릴 것입니다.
비슷한 점
Java처럼, Ruby에서도…
- 메모리는 가비지 컬렉터에서 관리합니다.
- 객체는 강 타입입니다.
- public, private, protected 메서드가 있습니다.
- 내장된 문서화 툴이 있습니다(Ruby에서는 RDoc이라 합니다). rdoc으로 생성한 문서는 javadoc으로 생성한 문서와 매우 비슷합니다.
다른 점
Java와는 다르게, Ruby에서는…
- 코드를 컴파일할 필요가 없습니다. 직접 실행하면 됩니다.
- 여러 인기 있는 서드파티 GUI 툴킷이 있습니다. Ruby 유저는 WxRuby, FXRuby, Ruby-GNOME2, Qt, Ruby Tk 등을 사용할 수 있습니다.
- 클래스 같은 것을 정의할 때 코드 블록에 중괄호를 넣는 대신, 선언 뒤에
end
키워드를 사용합니다. import
대신require
를 사용합니다.- 모든 맴버 변수는 private입니다. 밖에서의 모든 접근은 메서드를 통해 합니다.
- 메서드 호출의 괄호는 보통 생략 가능하고 자주 생략합니다.
- 2나 3.14159 같은 숫자를 포함해 모든 것이 객체입니다.
- 정적 타입 체크가 없습니다.
- 변수 이름은 라벨일 뿐입니다. 변수 이름에 관련된 타입은 없습니다.
- 타입 선언이 없습니다. 필요할 때 새로운 변수 이름에 대입만 하면 그대로
“동작”합니다(예를 들어,
int[] a = {1,2,3};
대신a = [1,2,3]
). - 캐스팅이 없습니다. 그냥 메서드를 호출하세요. 예외를 보게 될 때에는 유닛 테스트가 코드를 실행하기도 전에 말해 줄 것입니다.
Foo foo = new Foo("hi")
대신foo = Foo.new("hi")
를 사용합니다.- 생성자는 클래스 이름 대신 항상 “initialize”로 명명됩니다.
- 인터페이스 대신 “믹스인”을 사용합니다.
- XML보다 YAML을 선호하는 경향이 있습니다.
null
대신nil
을 사용합니다.- Ruby는
==
과equals()
를 다르게 취급합니다. Ruby에서 값이 같은지를 확인하려면==
를 사용하고(Java에서는equals()
), 객체가 같은지를 확인하려면equal?()
을 사용합니다(Java에서는==
).