Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

자바 vs 루비, 개발자가 꼭 알아야 할 7가지 핵심 차이점

자바에서 루비로 어떻게 넘어올 수 있을까요?

이 가이드에서는 두 언어의 주요 차이점을 하나씩 짚어보며, 성공적인 전환에 필요한 모든 것을 알려드립니다.

자바나 C#에서 루비로 이전하려는 많은 개발자에게 특히 유용한 내용입니다.

하지만…

단순히 두 언어의 차이가 궁금하신 분들께도 도움이 될 것입니다.

그럼 시작해 보겠습니다!

1. 정적 타이핑 vs 동적 타이핑

타이핑 방식은 두 프로그래밍 언어의 코드를 나란히 놓고 볼 때 가장 크고 눈에 띄는 차이입니다.

핵심부터 정리하면 다음과 같습니다:

  • 자바는 정적 타이핑(static typing)을 사용합니다
  • 루비는 동적 타이핑(dynamic typing)을 사용합니다

정확히 무슨 의미일까요?

타이핑이란 변수와 메서드 인자가 어떻게 동작하는지를 말합니다.

강타입(정적 타입) 언어에서는 모든 변수가 받아들일 수 있는 타입(클래스)을 반드시 선언해야 합니다.

실제 코드는 이렇습니다:

int n = 1;

여기서 int가 바로 타입이며, 이 경우 Integer를 의미합니다.

왜 유용할까요?

다른 타입의 객체를 이 변수에 할당하려 하면 컴파일러가 오류를 발생시키기 때문에, 프로그램 자체가 실행되지 않습니다.

즉, 항상 어떤 종류의 객체를 다루고 있는지 명확하게 알 수 있다는 장점이 있습니다.

반면 유연성이 떨어진다는 단점도 존재합니다.

반대로…

동적 타이핑은 유연성이 핵심입니다. 변수가 특정 타입에 묶여 있지 않으므로 언제든 타입을 바꿀 수 있습니다.

예시를 볼까요?

n = 1
n = "abc"

단점은 코드가 지저분하면 더 많은 오류에 부딪힐 수 있고, 코드를 읽을 때 얻을 수 있는 정보가 적다는 점입니다.

이것이 두 언어의 가장 큰 차이 중 하나입니다!

2. 문법: 간결함과 보일러플레이트

자바는 보일러플레이트(boilerplate)의 왕이라 불릴 만합니다.

보일러플레이트란 코드가 문법적으로 유효하기 위해 반드시 추가해야 하는 '준비' 코드를 말합니다.

그 결과…

자바는 아주 간단한 일조차 복잡하게 만듭니다!

자바로 작성한 Hello World:

class Hello {
  static public void main() {
    System.out.println("Hello World");
  }
}

그리고 이 코드를 클래스 파일로 컴파일한 뒤 실행해야 합니다.

두 단계나 필요한 거죠!

(IDE를 사용하면 이 과정이 좀 더 편해집니다.)

또 하나의 차이점은, 자바에서는 표현식 끝에 세미콜론을 붙여야 하지만 루비에서는 그럴 필요가 없다는 점입니다. 루비에서는 대부분의 경우 괄호도 생략할 수 있습니다.

루비로 작성한 Hello World:

puts "Hello World"

네, 맞습니다.

이게 전부입니다.

루비가 훨씬 깔끔한 코드를 만든다고 느껴지시나요?

게다가…

터미널에서 단 한 줄의 명령으로 이 코드를 실행할 수 있습니다!

컴파일 단계가 전혀 필요 없습니다.

3. 코드 실험: 내장 REPL

루비에는 irb라는 대화형 셸(REPL)이 기본으로 포함되어 있어, 짧은 코드를 즉석에서 빠르게 테스트할 수 있습니다.

파일을 저장할 필요도 없습니다.

에디터를 열 필요조차 없죠!

반면 자바에는 이런 기능이 기본 내장되어 있지 않았습니다. 적어도 Java 9 이전까지는요.

4. 파일 이름과 파일 구성

자바는 특정한 파일 명명 규칙과 프로젝트 구조를 강제합니다.

예를 들어:

Hello라는 이름의 (public) 클래스가 있다면, 파일 이름은 반드시 Hello.java여야 합니다.

루비에는 이런 제약이 없습니다.

또한 루비에는 private 클래스라는 개념 자체가 없습니다.

5. 예외 처리

자바에는 두 가지 종류의 예외가 있습니다:

  • Checked exception (확인된 예외)
  • Unchecked exception (확인되지 않은 예외)

차이점이 무엇일까요?

Checked exception은 반드시 처리해야 합니다!

처리하지 않으면 프로그램이 아예 실행되지 않습니다.

반면:

루비에는 예외 종류가 하나뿐입니다.

원하면 처리할 수 있고, 인터프리터가 따로 불평하지는 않지만, 방치하면 프로그램이 결국 크래시될 수 있습니다.

6. 컴파일러와 언어 라이선스

마지막으로 라이선스에 대해 이야기해 보겠습니다.

프로그래밍 언어에서 라이선스는 보통 큰 문제가 되지 않습니다.

왜냐하면?

대부분의 언어는 오픈소스이며, 한 사람이 수석 관리자이자 설계자 역할을 맡고 있기 때문입니다.

하지만 자바는 상황이 다릅니다.

자바는 대기업인 Oracle(오라클)에 속해 있으며, 이것이 라이선스에 영향을 미칩니다.

실제로:

자바 런타임에는 두 가지 버전이 있습니다. 'Oracle JDK'는 (제가 이해하기로는) 버전 9부터 상용 제품입니다.

그리고 'Open JDK'도 오라클 소유이지만, 오픈소스 라이선스를 따릅니다.

7. 라이브러리 및 코드 배포

또 하나의 중요한 차이점이자, 저(그리고 루비 창시자 Matz마저!)가 가장 좋아하는 루비의 강점은 바로 RubyGems입니다.

RubyGems 덕분에 HTTP 클라이언트 같은 라이브러리를 훨씬 쉽게 배포할 수 있습니다.

그 이유는:

  • 중앙 저장소가 존재합니다
  • 언어 자체에 통합되어 있습니다
  • 수많은 오픈소스 젬(gem)을 쉽게 찾고 사용할 수 있습니다

제가 아는 한, 자바에는 이에 필적하는 시스템이 없습니다. 이 부분은 루비의 압도적인 승리라고 할 수 있습니다.

정리

지금까지 자바와 루비의 주요 차이점을 살펴보았습니다. 정적 타이핑, 보일러플레이트, 파일 명명 규칙 등이 그 예입니다.

이제 루비를 더 잘 이해할 준비가 되었으니, 여러분에게 맞는 올바른 선택을 하실 수 있을 것입니다.

읽어주셔서 감사합니다! 🙂