본문 바로가기

분류 전체보기100

Enumerator 파헤치기2 지난 글에서 배열이나 해시, 범위 등의 객체로부터 Enumerator 객체를 생성할 수 있는 것을 알았다. 배열이나 해시, 범위처럼 여러 요소를 포함하거나 요소들의 집합을 표현하며, 각 요소에 접근하고 순회할 수 있는 기능을 제공하는 객체를 컬렉션이라고 부른다. 아래 그림을 보면 여러 컬렉션 객체들에 대해 블록을 전달하지 않고 each, map, select 메서드 등을 호출하여 Enumerator 객체를 생성했다. 여기서 Enumerator 객체의 inspect 값을 보면 해당 Enumerator 객체가 어떤 컬렉션 객체의 어떤 메서드로부터 생성이 되었는지 보여주는데, 이 정보를 Enumerator 객체가 가지고 있다는 것은 어떤 의미일까?아래 그림처럼 서로 다른 메서드를 통해 생성한 Enumerato.. 2025. 2. 4.
Enumerator 파헤치기1 루비에는 블록과 함께 호출했을 때 블록에 값을 하나씩 넘겨주면서 블록을 반복 실행해 주는 이터레이터(iterator)가 많이 있다.  배열이나 해시, 범위 등의 객체에서 사용할 수 있는 each 메서드와 정수 객체에서 사용할 수 있는 times, upto, downto 메서드 등 기본적인 이터레이터부터 Enumerable 모듈을 인클루드했을 때 사용할 수 있게 되는  map, select, reject, find, reduce, sort 메서드 등 다양한 이터레이터가 존재한다. 아래 그림을 보면 몇몇 이터레이터에 대한 간단한 예제를 볼 수 있다.이러한 이터레이터는 내가 블록을 제공하면 정해진 목적(변환, 검색, 필터링, 정렬 등)에 따라 요소들을 순회하면서 블록을 반복 실행하고 결괏값을 만들어 낸다. 그.. 2025. 1. 31.
테스트 프레임워크 만들기2 이번 글에는 MyMinitest에 Minitest에서 지원하는 여러 어설션 메서드들 중 하나인 assert_equal를 추가해 보자. 아래 코드를 보면 MyMinitest 모듈 안에 Assertions 모듈을 추가했고 그 안에 assert_equal 메서드를 정의하였다. assert_equal 메서드는 첫 번째 인수와 두 번째 인수를 == 비교 연산자로 비교하여 같으면 true를 반환하고 다르면 Failure 예외를 던진다. 예외 메시지 내용에 assert_equal 메서드가 호출된 소스의 위치 정보를 포함시키기 위해 Kernel 모듈에서 정의한 caller 메서드를 사용하였다. assert_equal 메서드 안에서 caller 메서드를 호출하면 해당 assert_equal 메서드가 호출된 경로를 역순으.. 2025. 1. 22.
테스트 프레임워크 만들기1 이번 글에서는 이전 글을 통해 살펴본 Minitest와 유사한 기능을 제공하는 테스트 프레임워크를 직접 만들어 보려고 한다. Minitest를 사용하면서 궁금한 것 중 하나는 우리가 작성한 테스트 파일을 실행시켰을 때 어떻게 테스트 메서드가 실행될 수 있을까? 라는 것이다. 이름에서 알 수 있듯 'minitest/autorun'이 자동으로 테스트를 실행시켜 주는 기능을 포함하고 있을 텐데, 그렇다면 'minitest/autorun'에서는 어떻게 Minitest 모듈의 Test 클래스를 상속한 클래스의 테스트 메서드들을 자동으로 실행시킬 수 있는 것일까? 이전 글에서 Minitest에서 제공하는 setup, teardown 등의 훅(Hook)을 사용해 봤는데, 루비에서는 프로그램 종료 시점과 그리고 특정 .. 2025. 1. 21.