Ruby 문법 참조서입니다.
Ruby를 배우다 보면 외워야 할 내용이 너무 많아 부담스럽게 느껴질 수 있습니다.
그래서 여러분을 위해 이 문법 참조서를 준비했습니다!
이 글은 기억을 환기시키고, Ruby 프로그램을 작성하는 데 꼭 알아야 할 내용을 빠르게 복습할 수 있도록 도와줄 것입니다.
즐겁게 읽어보세요!
목차
- 1. 문자열(String)
- 2. 해시(Hash)
- 3. 심볼(Symbol)
- 4. Nil
- 5. 배열(Array)
- 6. Enumerable 모듈
- 7. File 클래스
- 8. 정규 표현식(Regular Expression)
- 9. Ruby Gems & Bundler
- 10. 클래스와 객체지향 프로그래밍
- 11. 변수의 종류
- 12. %w, %i, %q, %r, %x
- 13. 괄호 사용법
- 14. 자주 쓰이는 예제
- 15. 마무리
문자열(String)
문자열은 큰따옴표("")로 감싼 문자들의 연속입니다. 텍스트와 데이터를 표현하는 데 사용됩니다.
문법 예시:
"I like chocolate"
작은따옴표('')를 사용하는 방법도 있습니다.
'Ruby is awesome'
중요한 메서드:
- size — 문자열 길이 확인
- empty? — 빈 문자열인지 검사
- include? — 특정 문자 포함 여부 확인
- gsub — 문자열 치환
- split — 문자열 분리
더 많은 메서드가 궁금하다면: https://www.rubyguides.com/2018/01/ruby-string-methods/
해시(Hash)
해시({})는 키-값 쌍(a => b)으로 이루어진 데이터 구조입니다. 사전처럼 활용되며, 고유한 키를 통해 요소에 접근할 수 있습니다. 키는 중복될 수 없습니다.
예시:
# 생성
h = { a: 1, b: 2, c: 3 }
# 접근
h[:a]
# 값 설정
h[:test] = 10
새 해시를 만들 때는 중괄호({})를 사용하지만, 해시 요소에는 항상 대괄호([])로 접근한다는 점에 유의하세요.
이 간단한 차이 때문에 많은 초보자들이 혼란을 겪으니 꼭 기억해 두세요.
문자열 키를 사용하는 해시:
h = { "a" => 1, "b" => 2, "c" => 3 }
중요한 메서드:
- key? — 특정 키의 존재 여부 확인
- fetch — 키로 값을 가져오기(없으면 예외 발생)
- new — 기본값이 있는 해시 생성
- merge — 해시 병합
더 많은 메서드가 궁금하다면: https://www.rubyguides.com/2020/05/ruby-hash-methods/
심볼(Symbol)
심볼은 식별용으로 사용되는 불변(immutable) 문자열로, 대표적인 예가 해시의 키입니다. 심볼은 항상 콜론(:bacon)으로 시작합니다. 심볼은 내부의 개별 문자(내용)를 위해 사용되는 것이 아니라 이름 자체로 의미를 갖습니다.
해시의 중괄호({}) 안에서 사용될 때는 콜론의 위치가 반대로 바뀝니다.
예시:
{ abc: 1 }
위 코드에서 abc:는 심볼 :abc를 뜻합니다.
더 알아보기: https://www.rubyguides.com/2018/02/ruby-symbols/
Nil
Nil은 '값이 없음' 또는 '찾지 못함'을 나타내는 싱글턴 클래스입니다(오직 하나의 객체만 허용).
조건문 안에서는 false로 평가됩니다.
더 알아보기:
- https://www.rubyguides.com/2018/01/ruby-nil/
- https://www.rubyguides.com/2019/02/ruby-booleans/
배열(Array)
배열은 객체들의 목록을 표현하는 객체입니다. 배열은 다른 배열을 포함해 어떤 종류의 객체든 담을 수 있습니다(a = [1, "abc", []]).
배열 요소는 인덱스(a[0])로 접근하고, 중첩된 배열은 a[0][0]처럼 접근합니다.
예시:
a = [] a << 10 a << 20 a << 30 a # [10, 20, 30]
중요한 메서드:
- size — 배열 크기 확인
- empty? — 빈 배열인지 검사
- push / pop — 요소 추가 및 제거
- join — 배열을 문자열로 결합
- flatten — 중첩 배열 펼치기
더 많은 메서드가 궁금하다면: https://ruby-doc.org/core-2.6.4/Array.html
Enumerable 모듈
Enumerable은 each 메서드를 구현한 모든 클래스(Array, Range, Hash 등)의 요소를 반복 처리할 수 있게 해주는 Ruby 모듈입니다.
중요한 메서드:
- map — 각 요소를 변환하여 새 배열 반환
- select — 조건에 맞는 요소만 추출
- inject — 요소들을 하나의 값으로 누적
더 알아보기:
A Basic Guide to The Ruby Enumerable Module (+ my favorite method)
File 클래스
File 클래스는 Ruby에서 파일을 다룰 수 있도록 도와주는 클래스입니다. 파일 읽기, 쓰기는 물론 파일 크기 같은 정보를 얻는 것까지 가능합니다.
예시:
File.read("/tmp/test.txt")
중요한 메서드:
- read — 파일 읽기
- write — 파일 쓰기
더 알아보기: https://www.rubyguides.com/2015/05/working-with-files-ruby/
정규 표현식(Regular Expression)
문자열 안에서 패턴, 부분 문자열 또는 특정 내용을 찾고 싶다면 정규 표현식이 답일 수 있습니다.
정규 표현식은 이메일 주소나 전화번호 유효성 검사, 텍스트에서 원하는 정보 추출 등에 활용할 수 있습니다.
예시:
"aaaa1".match?(/[0-9]/) # true "".match?(/[0-9]/) # false
더 알아보기: https://www.rubyguides.com/2015/06/ruby-regex/
Ruby Gems & Bundler
Ruby gem은 Ruby 프로그램에서 사용하기 위해 다운로드할 수 있는 패키지입니다.
이런 패키지들은 새로운 기능을 제공합니다.
예를 들어 Rails에서는 Devise gem으로 인증 기능을, Kaminari gem으로 페이지네이션 기능을 손쉽게 추가할 수 있습니다.
더 알아보기: https://www.rubyguides.com/2018/09/ruby-gems-gemfiles-bundler/
클래스와 객체지향 프로그래밍
Ruby는 객체지향 프로그래밍(Object-Oriented Programming) 언어입니다. Ruby에서는 모든 것을 객체로 생각하며, 객체는 설계도인 클래스로부터 생성됩니다.
객체는 무언가를 '알 수'도 있고 '할 수'도 있습니다. 객체에게 무언가를 시킬 때는 메서드를 사용합니다.
중요한 메서드:
- class — 객체의 클래스 확인
- include / extend — 모듈 믹스인
더 알아보기:
- https://www.rubyguides.com/2019/02/ruby-class/
- https://www.youtube.com/watch?v=LuTTUNnSj6o&list=PL6Eq_d2HYExeKIi4d9rUEoD6qSiKS4vfe&index=2
변수의 종류
변수는 객체에 붙이는 라벨로, 그 라벨을 통해 객체에 접근할 수 있습니다. 변수를 객체와 연결하는 과정을 '변수 할당(variable assignment)'이라고 부릅니다.
예시:
a = 1
Ruby에서는 여러 종류의 변수를 사용합니다.
종류 목록:
- 지역 변수(Local variable) —
something - 인스턴스 변수(Instance variable) —
@something - 상수(Constant) —
Something/SOMETHING - 전역 변수(Global variable) —
$something
이들 간의 주요 차이는 어디에서 접근할 수 있는지(접근 범위)에 있습니다.
%w, %i, %q, %r, %x
Ruby에는 백분율 기호(%)를 사용한 특별한 문법으로 객체를 생성하는 방법이 있습니다. 이는 작업량을 줄여주는 단축 문법입니다.
앞으로 Ruby 코드에서 %w를 보면 무슨 의미인지 바로 알 수 있을 겁니다!
예시:
array_of_strings = %w(apple orange coconut) array_of_symbols = %i(a b c) string = %q(things) regular_expression = %r([0-9])
- %w — 문자열 배열 생성
- %i — 심볼 배열 생성
- %q — 따옴표 없이 문자열 생성
백분율 기호(%)가 수학 연산자인 나머지(modulo) 연산에도 사용된다는 점도 함께 기억해 두세요.
괄호 사용법
Ruby에서 괄호와 세미콜론은 필수가 아니지만, 필요하다면 사용할 수 있습니다.
기본 규칙 몇 가지:
- 인자가 없는 메서드를 정의할 때는 괄호를 쓰지 않는다 =>
def foo - 메서드에 인자가 있을 때는 괄호를 사용한다 =>
def foo(a, b, c) - 연산의 우선순위를 변경하고 싶을 때는 괄호를 사용한다 =>
(a.size + b.size) * 2
즉, 괄호는 가독성을 높이는 용도로도, 연산 순서를 조절하는 용도로도 활용됩니다.
자주 쓰이는 예제
실무에서 자주 등장하는 Ruby 문법 예제들을 소개합니다.
메서드 정의
def backup_database # method body end
메서드 더 알아보기:
- https://www.rubyguides.com/2018/06/rubys-method-arguments/
- https://www.rubyguides.com/2019/06/ruby-method-definition/
클래스 정의
class Fruit # methods end
클래스 더 알아보기:
- https://www.rubyguides.com/2019/02/ruby-class/
- https://www.rubyguides.com/2019/01/what-is-inheritance-in-ruby/
삼항 연산자(Ternary Operator)
true ? "yes" : "no"
문자열 보간(String Interpolation)
fruit = "orange"
puts "I have an #{fruit}. Would you like a slice of it?"
보간 더 알아보기:
- https://www.rubyguides.com/2019/07/ruby-string-concatenation/
each와 블록
[1,2,3].each do |n| puts n end
If / Else 조건문
n = 20 if n > 1 puts "Greater than 1" else puts "Less than 1" end
Case 문
case 20 when 1..20 puts "Between 1 & 20" when 21..40 puts "Between 21 & 40" else puts "Not within a valid range" end
여기서 1..20은 Range(범위) 객체입니다.
마무리
이번 글에서 Ruby 문법의 기본기를 익혔습니다. 이제 직접 Ruby 프로그램을 작성해 보세요! 몸에 완전히 익을 때까지 자주 복습하는 것이 좋습니다.
문법 요소들의 일반적인 명명 규칙 목록도 함께 살펴보시면 도움이 될 것입니다.
끝까지 읽어주셔서 감사합니다. 🙂