Ruby는 일본의 마츠모토 유키히로(Matz)가 1995년에 설계한 언어로, "개발자의 행복"을 최우선 설계 원칙으로 삼습니다. 간결하고 표현력이 높은 문법, 강력한 메타프로그래밍, 그리고 Rails 프레임워크와의 궁합으로 여전히 강력한 생산성을 자랑합니다.
Ruby의 철학: 최소 놀람의 원칙
Matz가 강조한 최소 놀람의 원칙(Principle of Least Astonishment)은 코드가 개발자가 직관적으로 예상하는 방식대로 동작해야 한다는 것입니다.
# 모든 것이 객체
puts 5.class # Integer
puts "hello".class # String
puts nil.class # NilClass
puts true.class # TrueClass
# 숫자에도 메서드 호출 가능
puts 5.times.map { |i| i * 2 }.inspect # [0, 2, 4, 6, 8]
puts -5.abs # 5
puts 3.14.ceil # 4
블록(Block), 람다(Lambda), Proc
Ruby의 블록은 코드를 인자로 전달하는 강력한 메커니즘입니다. yield 키워드로 블록을 호출할 수 있습니다.
# 블록: do...end 또는 { } 사용
[1, 2, 3].each do |n|
puts n * 2
end
# Proc: 블록을 객체로 저장
double = Proc.new { |n| n * 2 }
puts double.call(5) # 10
# Lambda: Proc과 유사하지만 인자 검사, return 동작이 다름
square = lambda { |n| n ** 2 }
puts square.call(4) # 16
# 또는 화살표 문법
cube = ->(n) { n ** 3 }
puts cube.call(3) # 27
메타프로그래밍
Ruby의 가장 강력한 기능 중 하나입니다. 코드가 런타임에 코드를 생성하거나 변경할 수 있습니다.
class Person
attr_accessor :name, :age # attr_accessor가 getter/setter 자동 생성
def initialize(name, age)
@name = name
@age = age
end
# method_missing: 정의되지 않은 메서드 호출 처리
def method_missing(method_name, *args)
if method_name.to_s.start_with?("say_")
word = method_name.to_s.sub("say_", "")
puts "#{@name} says: #{word}"
else
super
end
end
end
person = Person.new("Alice", 30)
person.say_hello # Alice says: hello
person.say_goodbye # Alice says: goodbye
Ruby on Rails: 관습이 설정을 이긴다
Rails의 핵심 철학인 CoC(Convention over Configuration)와 DRY(Don't Repeat Yourself)는 반복적인 설정 작업 없이 빠른 개발을 가능하게 합니다.
# 새 Rails 프로젝트 생성부터 서버 시작까지 3줄
rails new myapp --database=postgresql
cd myapp
rails server
# 스캐폴딩으로 CRUD 즉시 생성
rails generate scaffold Article title:string body:text
rails db:migrate
# → 모델, 마이그레이션, 컨트롤러, 뷰, 라우트 자동 생성
Ruby를 선택할 때
- 적합: 웹 앱 MVP, 스타트업 프로토타이핑, 스크립팅, CLI 도구, 내부 관리 도구
- 참고: 고도의 동시성이나 극한 성능이 필요한 경우 Go나 Rust를 검토