Ruby는 표현력이 풍부한 구문을 통해 다양한 프로그래밍 패러다임을 지원합니다. 주요 내용은 다음과 같습니다.
핵심 구문 요소
- 리터럴: 숫자, 문자열, 심볼, 배열, 해시, 범위, 불리언, Nil, Here Document 등 고정된 값을 직접 표현하는 방식을 제공합니다.
- 변수: 전역, 클래스, 인스턴스, 지역 변수 및 의사 변수를 포함하며, 객체에 대한 참조 역할을 합니다.
- 제어 흐름:
if,unless,case,while,until같은 조건문 및 반복문과 함께break,next,redo,retry등의 흐름 제어 키워드를 지원합니다. Ruby 3.0부터 도입된 패턴 매칭(in절,^고정 연산자, 가드 절if)은 복잡한 데이터 구조를 효과적으로 처리할 수 있게 합니다. - 메서드:
def키워드로 정의되며, 필수/기본/스플랫(*)/키워드(city:) 인수를 지원합니다.self를 통해 현재 객체를 참조하고,super를 통해 상위 클래스의 메서드를 호출합니다. - 클래스 및 객체: 객체 지향 프로그래밍의 기본 단위로,
attr_reader,attr_writer,attr_accessor를 통해 속성 접근자를 쉽게 정의할 수 있습니다.public,protected,private키워드로 접근 제어를 명시합니다.
고급 기능 및 구조
- 블록: 코드 청크를 메서드에 전달하는 강력한 기능으로,
each,map,yield와 함께 사용됩니다.Proc,lambda,proc를 통해 블록을 객체로 변환하여 유연하게 활용할 수 있습니다. - 모듈: 네임스페이스를 제공하고
include,extend,prepend를 통해 클래스에 믹스인(Mixin) 형태로 기능을 추가하여 다중 상속과 유사한 효과를 줍니다. - 예외 처리:
begin,rescue,else,ensure,end블록을 사용하여 프로그램 오류를 효과적으로 관리하고,raise로 예외를 발생시킵니다. - I/O:
File,IO,StringIO클래스를 통해 파일 및 스트림 입출력을 처리하며,Socket,Net::HTTP,OpenURI등으로 네트워크 통신을 지원합니다.
개발 환경 및 도구
- 디버깅: 내장
debug라이브러리의binding.break,step,next,continue명령과PryGem을 활용하여 코드 실행 흐름을 제어하고 변수를 검사할 수 있습니다.p,pp는 객체 상태를 출력하는 데 유용합니다. - 테스팅:
Minitest는 단언(assertion) 기반의 단위 테스트를,RSpec은 행위 주도 개발(BDD) 스타일의 명세(spec) 기반 테스트를 지원하며, 목(Mock) 객체 및 스텁(Stub) 기능을 제공하여 테스트 격리 및 효율성을 높입니다. - 명령줄 도구:
irb는 대화형 Ruby 셸을 제공하며,ruby명령의 다양한 옵션(-e,-n,-p)과ARGV,OptionParser를 활용하여 스크립트 인수를 처리할 수 있습니다. - Gem 및 Bundler: Ruby Gem은 코드 라이브러리 배포 및 관리를 위한 표준 패키징 형식이며, Bundler는 프로젝트의 Gem 의존성을 관리하여 개발 환경의 일관성을 유지합니다.
현대 Ruby의 발전
- 동시성:
Thread,Fiber외에 Ruby 3.0에서 도입된Ractor는 GIL(Global Interpreter Lock)을 우회하여 진정한 병렬 처리를 가능하게 합니다. - 웹 개발:
CGI,ERB를 통한 템플릿 처리,Rack을 통한 웹 서버와 애플리케이션 간의 표준 인터페이스 제공,ruby.wasm을 통한 웹 어셈블리 지원으로 브라우저 내 Ruby 실행을 가능하게 합니다. - 타입 시스템:
RBS는 별도의 파일에 타입 시그니처를 정의하여 정적 분석을 지원하고,Sorbet는 Ruby 코드 내에 타입 어노테이션을 추가하여 런타임 타입 검사까지 제공합니다.