이번 글에서는 루비(Ruby)의 grep 메서드에 대해 자세히 알아보겠습니다. 이 메서드는 어떤 일을 할 수 있을까요? grep을 사용하면 배열(Array), 범위(Range)처럼 열거 가능한(Enumerable) 객체를 손쉽게 필터링할 수 있습니다. 그런데 select도 이미 같은 역할을 하지 않나요? 맞습니다. 하지만 grep은 select와 다른 방식으로 동작하며, 결과물도 다르게 나타납니다. 바로 예제를 통해 살펴보겠습니다. Ruby grep 메서드 실전 예제 다음과 같은 배열이 있다고 가정해 봅시다. objects = [
오늘은 배열, 해시 또는 Enumerable 모듈을 포함하는 모든 객체에 대해 조건문을 검사할 때 유용하게 쓰이는 4가지 Enumerable 메서드를 알아보겠습니다. 이 4가지 메서드는 모두 true 또는 false를 반환합니다. Ruby all? 메서드 배열 안의 모든 문자열이 특정 길이를 갖고 있는지 확인하고 싶다고 가정해 봅시다. 전통적인 방식 def all_words_have_specific_size?(words) return false if words.empty? words.each do |str| re
CSV는 Comma-Separated Values(쉼표로 구분된 값)의 약자입니다. 각 행의 값이 쉼표로 구분되어 있는 매우 흔한 데이터 형식으로, 데이터를 내보내거나(export) 가져올(import) 때 널리 활용됩니다. 예를 들어, Gmail 연락처를 CSV 파일로 내보낼 수 있고, 같은 형식으로 다시 가져올 수도 있습니다. CSV 파일은 다음과 같은 형태입니다: id,name 1,chocolate 2,bacon 3,apple 4,banana 5,almonds 이제 Ruby CSV 라이브러리를 사용해 CSV 파일을 읽고 쓰
RSpec에서 모크(Mock)란 무엇인가? 모크는 RSpec에만 있는 개념이 아니라, 테스트 분야 전반에서 통용되는 개념입니다. 모크란 테스트에 사용되는 객체입니다. 일반적인 기대(expectation)처럼 출력 값을 검증하는 대신, 모크는 두 객체 간의 상호작용을 테스트할 때 사용합니다. 예를 들어, 이미지를 뒤집는 API를 작성한다고 가정해 봅시다. 직접 이미지 조작 코드를 작성하는 대신 mini_magick 같은 젬(gem)을 사용하게 되죠. 그렇다면 여러분의 코드와 이 외부 의존성 사이의 상호작용을 테스트하고 싶어질 겁니다.
루비(Ruby)에는 화면에 무언가를 출력하는 방법이 여러 가지 있습니다. 그중 가장 많이 쓰이는 세 가지는 다음과 같습니다: puts print p 그런데 이들은 어떻게 다를까요? 그리고 언제 어떤 것을 사용해야 할까요? 이 글에서 바로 그 답을 확인해 보세요! 줄바꿈 없이 출력하는 방법 사용자에게 결과를 보여주기 위해 화면에 무언가를 출력할 때는 일반적으로 puts를 사용합니다. 사용 방법은 다음과 같습니다: puts Hello there! puts는 호출될 때마다 메시지 끝에 자동으로 줄바꿈(newline)을 추가합니다.
Ruby에는 변수가 정의되어 있는지 확인할 수 있는 defined? 키워드가 있습니다. 변수가 존재하면 해당 변수의 타입을 반환합니다: apple = 1 defined?(apple) # local-variable 존재하지 않으면 nil을 반환합니다: defined?(bacon) # nil 이는 JavaScript의 typeof 연산자와 비슷한 역할을 합니다. 만약 객체의 클래스를 알고 싶다면 defined? 대신 class 메서드를 사용하는 것이 좋습니다. defined?에 대해 기억해 둘 만한 흥미로운 특징들이 있습니다:
코딩 챌린지를 풀어보는 것은 Ruby 실력과 문제 해결 능력을 향상시키는 가장 효과적인 방법 중 하나입니다. 물론 코딩 인터뷰 준비에도 큰 도움이 되죠. 왜 코딩 챌린지일까요? 챌린지를 푸는 동안에는 오직 하나의 구체적인 문제에만 모든 집중력을 쏟을 수 있기 때문입니다. 다른 것들은 신경 쓸 필요가 없습니다. 이러한 연습은 사고력을 확장시켜 주고, Ruby의 흥미로운 언어 기능들을 탐색하게 해주며, 더 나은 Ruby 개발자로 성장할 수 있도록 도와줍니다. 일부 챌린지는 특정 알고리즘, 자료구조, 혹은 수학적 트릭 같은 개념에 대한
이 글에서는 루비(Ruby)의 속성 접근자인 attr_accessor에 대해 자세히 알아봅니다. 바쁘신 분들은 아래 예제 섹션으로 바로 내려가셔도 좋습니다. 하지만 그 전에 먼저 설명하고 싶은 것이 있습니다. 왜 속성 접근자를 사용해야 하는가? 속성 접근자가 필요한 이유 인스턴스 변수를 가진 클래스가 있고, 이 변수를 클래스 외부로 노출하고 싶다고 가정해 봅시다. 어떻게 해야 할까요? 바로 메서드를 정의해야 합니다. 인스턴스 변수에는 오직 메서드를 통해서만 접근할 수 있습니다. 그렇지 않으면 에러가 발생하기 때문입니다. 다음 예제를
ERB는 템플릿 엔진입니다. 템플릿 엔진을 사용하면 HTML과 Ruby 코드를 섞어서 작성할 수 있으며, 이를 통해 데이터베이스의 데이터를 활용해 웹 페이지를 동적으로 생성할 수 있습니다. ERB는 Rails에서 뷰(view)를 렌더링할 때 사용되는 기본 템플릿 엔진입니다. 참고: Rails는 Ruby 표준 라이브러리의 ERB 클래스 대신 erubi라는 구현체를 사용합니다. 이 글 뒷부분에서 살펴보겠지만, ERB를 사용하기 위해 꼭 Rails가 필요한 것은 아닙니다. 먼저 ERB의 문법, Ruby 프로젝트에서 ERB를 사용하는 방법
새로운 기능과 성능 개선을 담은 Ruby의 새 버전이 곧 출시됩니다. 이번 변화들을 미리 파악해 두면 좋겠죠? 지금부터 하나씩 살펴보겠습니다! 무한 범위(Endless Range) Ruby 2.5 이하 버전에서도 Float::INFINITY를 활용하면 일종의 무한 범위를 표현할 수 있었지만, Ruby 2.6에서는 이를 한 단계 발전시킨 새로운 문법이 도입되었습니다. 새로운 무한 범위는 다음과 같이 작성합니다: (1..) (1..10)처럼 끝값을 갖는 일반적인 범위와 달리, 이 표현식에는 종료 값이 없다는 점이 특징입니다. 활용
루비에서는 메서드에 새로운 이름(별칭)을 부여하는 두 가지 방법이 있습니다. alias (키워드) alias_method (메서드) 두 방식은 기능적으로 같은 일을 수행하지만 동작 방식에 미묘한 차이가 있어 많은 개발자를 혼란스럽게 만드는 주제입니다. 아래 이미지는 두 방식의 차이를 한눈에 정리한 것입니다: 지금부터 이 차이점들을 하나씩 자세히 살펴보며 확실하게 이해해 보겠습니다! alias 키워드 먼저 alias는 루비의 키워드입니다(if, def, class 등과 같은 종류). 사용 형태는 다음과 같습니다: alias p
루비(Ruby)의 성능은 버전이 거듭될수록 꾸준히 향상되고 있으며, 루비 개발팀은 더욱 빠른 루비를 만들기 위해 끊임없는 노력을 기울이고 있습니다. 그러한 노력 중 하나가 바로 3×3 프로젝트입니다. 목표는 무엇일까요? Ruby 3.0을 Ruby 2.0보다 3배 빠르게 만드는 것입니다. 이 프로젝트의 핵심 요소 중 하나가 바로 새로운 MJIT 컴파일러로, 이번 글에서 자세히 다뤄보겠습니다. MJIT란 무엇인가? MJIT는 메서드 기반 JIT(Just-In-Time) 컴파일러(Method Based Just-in-Time Compil
Ruby에서 객체를 복사할 수 있다는 사실을 알고 계셨나요? 게다가 복사 방법도 한 가지가 아니라 두 가지나 됩니다! 바로 이 두 메서드입니다: dup clone 곧 두 메서드의 차이점을 자세히 살펴보겠습니다. 그 전에 먼저 이런 질문부터 드려볼까요? 객체를 복제해야 하는 이유는? Ruby의 많은 객체는 변경 가능(mutable)합니다. 즉, 언제든 내용을 수정할 수 있죠. 그래서 객체를 변경하면서도 원본은 그대로 보존하고 싶을 때 객체를 복제하면 유용합니다. 예시를 들어볼게요. 배열의 첫 번째 요소만 제외한 나머지 요소들로 구
Ruby로 개발하다 보면 여러 줄에 걸친 문자열을 코드 안에 그대로 넣고 싶은 순간이 자주 찾아옵니다. SQL 쿼리, HTML 조각, 설정 텍스트 등을 매번 따옴표와 \n으로 조립하는 것은 번거롭고 가독성도 떨어지죠. 이럴 때 유용한 것이 바로 heredoc(히어독)입니다. Heredoc이란 무엇인가? Heredoc은 여러 줄의 문자열을 정의하는 문법으로, 원본의 들여쓰기와 서식을 그대로 유지할 수 있다는 것이 가장 큰 특징입니다. 주로 SQL이나 HTML처럼 구조화된 코드 조각을 소스 코드 안에 직접 삽입할 때 활용됩니다. 기본
Ruby 코드 안에서 외부 명령어를 실행하고 싶은 순간이 분명히 찾아옵니다. 예를 들어 wkhtmltopdf처럼 HTML 파일을 PDF로 변환해 주는 도구를 사용해야 할 때가 그렇죠. 다행히 Ruby에는 이런 작업에 활용할 수 있는 여러 가지 메서드가 준비되어 있습니다. 다만 어떤 메서드를 선택하느냐에 따라 결과와 동작 방식이 크게 달라진다는 점을 기억해야 합니다. 지금부터 각 메서드의 특징과 사용법을 하나씩 살펴보겠습니다. Ruby의 system 메서드 system 메서드는 외부 명령어를 실행하는 가장 간단한 방법입니다. 사용법은
오늘은 상태 머신(state machine)의 개념과 동작 원리를 살펴보고, AASM 젬을 활용해 Ruby 프로젝트에서 상태 머신을 구현하는 방법까지 함께 알아보겠습니다. 신호등으로 이해하는 상태 머신 먼저 신호등을 떠올려 보세요. 신호등은 빨간색, 노란색, 초록색 중 하나의 상태를 가집니다. 그리고 색이 바뀔 때 다음 색상은 언제나 현재 색상에 따라 결정됩니다. 여기서는 시각장애인이 건널 수 있는 시기를 알 수 있도록 소리를 내는 신호등이라고 가정해 보겠습니다. 이제 여러분이 이 신호등의 소프트웨어를 개발한다고 생각해 봅시다.
REPL은 Read-Eval-Print-Loop(읽기–평가–출력–반복)의 약자입니다. 즉, 루비 코드를 직접 입력하고 그 결과를 즉시 확인할 수 있게 해주는 프로그램입니다. 대표적인 REPL로는 irb가 있으며, 또 다른 인기 도구로는 pry가 있습니다. 이런 도구들이 유용한 이유는 간단합니다. 루비 코드를 빠르게 테스트해 볼 수 있기 때문입니다. 예를 들어, 문자열 배열을 정수 배열로 변환하려고 하는데 정확한 방법이 기억나지 않는다고 가정해 봅시다. 이럴 때 검색해서 방법을 찾아보고(물론 전혀 문제없습니다!), REPL에서 원하는
Ruby 애플리케이션이 외부 API를 사용하고 있다면, 아마 느린 테스트와 API 호출 제한(Rate Limit) 문제를 겪어본 적이 있을 것입니다.해결책은 무엇일까요?클라이언트 라이브러리의 HTTP 메서드를 직접 스텁(stub) 처리하고, 미리 정해둔 응답을 반환하도록 만들 수도 있습니다.하지만 이 방식은 작업량이 많고 코드도 지저분해지기 쉽습니다!더 나은 방법은 WebMock + VCR처럼 강력한 젬(gem) 조합을 활용하는 것입니다.WebMock은 다음과 같은 주요 HTTP 라이브러리에서 발생하는 HTTP 요청을 가로챕니다:n
Ruby 애플리케이션에서 이미지를 다루다 보면, 이미지를 다양한 방식으로 수정해야 할 필요가 자주 생기곤 합니다. 예를 들어 저장 공간을 절약하고 사용자에게 더 빠른 다운로드 속도를 제공하기 위해 이미지 크기를 줄이는 작업이 대표적이죠. 그렇다면 이 작업은 어떻게 수행할 수 있을까요? 바로 MiniMagick이라는 젬(gem)이 도와줄 수 있습니다. MiniMagick은 ImageMagick 프로그램과 여러분의 Ruby 코드 사이를 이어주는 인터페이스 역할을 합니다. 이를 통해 다양한 이미지 변환 기능을 손쉽게 적용하여 원하는 형태
Ruby는 웹 애플리케이션 외에도 다양한 작업을 수행할 수 있는 언어지만, 많은 개발자들이 이 사실을 잊곤 합니다. 이 글에서는 Ruby로 명령줄 애플리케이션(CLI)을 구축하는 방법을 단계별로 알아보겠습니다. 다음은 여러분이 이미 익숙할 수 있는 명령줄 도구들입니다: psql rails bundler gem git CLI 애플리케이션을 만드는 방법은 여러 가지가 있으며, 이 글에서는 그중 세 가지에 집중해 살펴보겠습니다. 이 글에서 배울 내용: ARGV 배열 OptionParser 라이브러리 Thor 젬(gem) 그럼 시작