본문 바로가기

분류 전체보기100

Comparable 모듈 사용해서 객체 정렬하기1 이번 글에서는 Comparable 모듈에 대해 살펴볼 건데, Comparable 모듈을 사용하여 클래스를 만들면 해당 클래스의 객체들 간의 크기 비교를 손쉽게 할 수 있다. 이전 'Enumerable 파헤치기' 글을 통해 Enumerable 모듈을 인클루드할 클래스에서 each 메서드 하나만 정의해 주면 each 메서드를 기반으로 정의된 Enumerable 모듈의 많은 메서드들을 손쉽게 사용할 수 있다는 것을 알았다. Comparable 모듈도 Comparable 모듈을 인클루드할 클래스에서 모양의 '우주선 연산자(spaceship operator)'를 정의해 놓으면 Comparable 모듈이 제공하는 비교 관련 여러 메서드들을 사용할 수 있게 된다.아래 그림을 보면 숫자 관련 클래스인 Integer,.. 2024. 11. 15.
파일 및 디렉터리 수 집계하기2 지난번 글에서 특정 디렉터리 안의 모든 항목들을 집계하기 위해 재귀적 탐색 패턴과 함께 Dir 클래스의 glob 메서드를 사용하여 한 번에 전체 항목 결과를 받아와서 집계를 했었다. 해당 작업을 쉽고 간단한 코드로 처리할 수는 있었지만, 항목이 많은 큰 디렉터리를 대상으로 집계 작업을 수행할 경우에는 프로그램이 사용하는 메모리의 양이 glob 메서드가 실행되는 동안 계속적으로 늘어난다는 것을 실제 테스트를 통해 확인해 보았다. 오늘은 반복문을 사용해서 직접 하위 디렉터리를 하나씩 탐색하는 방법으로 항목을 집계해 보려고 한다. 아래 코드를 보면 FileCounter 클래스에 count_by_recursive 메서드를 하나 추가했는데, 메서드 이름처럼 코드를 재귀 호출 방식으로 작성하였다. 디렉터리 안의 항.. 2024. 11. 12.
파일 및 디렉터리 수 집계하기1 이전 '파일 선택기 만들기' 글에서 특정 디렉터리 안의 항목들을 조회할 때 Dir 클래스의 glob 메서드를 사용했었는데, 이 glob 메서드는 파일이나 디렉터리 이름이 '.'으로 시작하는 것은 결과 목록에 포함시키질 않는다. 테스트를 위해 D:/blog/ruby 폴더 안에 file_counter 폴더를 하나 만들고 그 안에 D:/blog/ruby/file_selector 폴더 안에 있는 test 폴더를 그대로 복사해 오자. 그다음 복사해 온 D:/blog/ruby/file_counter/test 폴더 안에 '.x' 폴더와 '.y' 파일을 생성하자.이제 D:/blog/ruby/file_counter 위치에서 irb를 실행한 후 아래 그림처럼 코드를 입력해 보면서 결과를 직접 확인해 보자. 현재 작업 디렉.. 2024. 11. 8.
파일 선택기 만들기5 '파일 선택기 만들기' 글을 원래 지난번에 마무리를 했었는데, FileSelector 클래스 안에서 현재 작업 디렉터리를 변경하는 부분을 아무래도 제거하는 것이 좋겠다는 생각이 들었다.  첫째, FileSelector 클래스를 사용하는 프로그램에서 현재 작업 디렉터리의 경로에 의존하는 코드가 있을 수도 있기 때문이다. 만약 그렇다면, FileSelector 객체의 select 메서드를 호출한 이후 프로그램의 동작에 문제가 생길 수도 있다. 두 번째는 현재 작업 디렉터리를 변경했던 목적이 Dir 클래스의 glob 메서드가 돌려주는 항목들의 이름에 경로명이 포함되지 않아야 한다는 단순한 이유 때문이다. 아래 그림을 보면 File 클래스의 basename 메서드를 사용하면 파일 경로를 제외하고 순수한 파일 또.. 2024. 11. 6.