Ruby를 Python보다 선호하는 이유: 개발자 Bozhidar Batsov의 관점

I Chose Ruby over Python

작성자
HackerNews
발행일
2025년 09월 12일

핵심 요약

  • 1 Ruby는 거의 모든 구문이 값을 반환하는 식(Expression)으로 설계되어 있어, Python의 문(Statement) 중심 구조보다 코드의 흐름이 유연하고 결과 처리가 직관적입니다.
  • 2 객체 지향의 일관성 측면에서 Ruby는 전역 함수 대신 인스턴스 메서드를 활용함으로써 데이터와 동작을 더욱 긴밀하고 논리적으로 연결하는 구조를 가집니다.
  • 3 명명 규칙의 명확성(?, ! 사용)과 패키지 관리 도구(Bundler)의 단일화된 생태계는 개발자가 환경 설정보다 비즈니스 로직 구현에 집중할 수 있게 돕습니다.

도입

이 글은 유명한 오픈 소스 개발자인 Bozhidar Batsov가 20년 가까이 Ruby를 주력 언어로 사용하며 느낀 Python 대비 Ruby의 기술적 우위와 선호 이유를 상세히 설명합니다. 저자는 과거 Python을 학습했던 경험과 최근 다시 Python을 살펴보며 느낀 점을 바탕으로, 두 언어의 설계 철학 차이가 실제 개발 경험에 미치는 영향을 주관적이면서도 논리적인 관점에서 분석합니다. 단순히 어떤 언어가 더 낫다는 논쟁보다는, 개발자에게 즐거움을 주는 언어적 특성이 무엇인지에 초점을 맞추고 있습니다.

1. 전역 함수와 메서드 중심 설계의 차이\nPython에서는 len(obj)sum(iterable)과 같이 객체를 인자로 받는 전역 함수를 자주 사용합니다. 이는 절차지향적 유산이 남아있는 구조로, Ruby의 obj.lengtharr.sum처럼 객체 스스로가 자신의 상태를 보고하는 순수 객체 지향 방식과 대조됩니다. 저자는 데이터 구조 뒤에 동작을 배치하는 Ruby의 방식이 훨씬 직관적이고 일관성 있다고 주장하며, 이는 캡슐화 원칙에도 더 부합합니다.\n\n### 2. 식(Expression) 기반 언어의 강력함\nRuby에서는 거의 모든 것이 값을 반환하는 ‘식’입니다. 반면 Python은 del이나 return처럼 부수 효과만을 위해 실행되는 ‘문(Statement)’이 많습니다. 예를 들어 Ruby에서 배열의 요소를 삭제하는 메서드는 삭제된 값을 반환하므로 이를 즉시 변수에 할당하거나 다른 연산에 활용할 수 있습니다. 이러한 특성은 코드의 결합도를 낮추고 함수형 프로그래밍 스타일을 적용하기 쉽게 만들어 줍니다.\n\n### 3. 문법적 설탕과 가독성 도구\nRuby는 개발자의 가독성을 높이기 위한 다양한 장치를 제공합니다.\n- 술어 메서드(?): even?, nil?과 같이 물음표를 사용하여 불리언 값을 반환함을 명시합니다. Python의 isdigit()보다 훨씬 읽기 쉽습니다.\n- 파괴적 메서드(!): 원본 데이터를 변경하는 메서드에 느낌표를 붙여 부수 효과를 경고합니다. Python의 list.sort()sorted(list)의 구분보다 명시적입니다.\n- 범위 리터럴: 1..n(포함)과 1...n(미포함)을 통해 범위를 간결하게 표현합니다.\n- 람다 표현식: Python의 lambda 키워드보다 Ruby의 -> 단축 문법이 훨씬 현대적이고 간결하여 고차 함수를 다룰 때의 피로도를 줄여줍니다.\n\n### 4. 불리언 타입의 엄격함\nPython의 bool 타입은 int를 상속받아 True + 1과 같은 연산이 가능하며, 빈 리스트나 0을 False로 취급하는 ‘Falsy’ 개념이 광범위합니다. 반면 Ruby는 falsenil만을 거짓으로 간주하며, 불리언과 숫자를 엄격히 분리하여 예상치 못한 논리 오류를 방지하고 타입 안정성을 높입니다.\n\n### 5. 명시적 self와 코드의 간결성\nPython은 모든 인스턴스 메서드의 첫 번째 인자로 self를 명시해야 하며, 이는 코드의 가독성을 해치는 보일러플레이트가 됩니다. Ruby는 이를 언어 차원에서 암시적으로 처리하여 개발자가 핵심 로직에만 집중할 수 있게 합니다. 또한 __init__과 같은 던더(Dunder) 메서드 대신 직관적인 메서드 명명 규칙을 따르는 점도 Ruby의 강점입니다.\n\n### 6. 패키지 관리 생태계의 단순함\nPython 개발자들이 pip, pipenv, poetry, pdm, uv 등 끊임없이 변하는 패키지 관리 도구들 사이에서 혼란을 겪는 것과 달리, Ruby는 RubyGemsBundler라는 확고한 표준을 가지고 있습니다. 이러한 도구의 단일화는 ‘설정보다 관습(Convention over Configuration)’이라는 Ruby의 철학을 잘 보여주며, 새로운 개발자가 프로젝트에 합류했을 때 환경 구축에 소모되는 시간을 획기적으로 단축해 줍니다.

결론

결론적으로 저자는 Ruby의 문법적 우아함과 일관성이 Python보다 뛰어나다고 평가하며, 이것이 자신이 '팀 Ruby'에 머무는 핵심 이유라고 밝힙니다. 비록 Python이 데이터 과학 등 특정 분야에서 압도적인 생태계를 구축했음에도 불구하고, 프로그래밍 자체에서 느끼는 행복감과 코드의 심미적 가치를 중시하는 개발자들에게 Ruby는 여전히 강력한 대안임을 시사합니다. 언어의 선택은 결국 개인의 철학과 도구가 제공하는 일관성에 달려 있음을 다시 한번 확인시켜 줍니다.

댓글 0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!