본문 바로가기

분류 전체보기100

모든 것이 객체 지난번 글의 스레드 관련 예제 코드에서 Integer 클래스의 인스턴스 메서드인 times를 사용해 봤던 걸 기억할 것이다. 오늘은, 다른 프로그래밍 언어에서는 일반적으로 단순히 값 그 자체 즉, 원시 타입(primitive type)의 값으로 다루지만 루비에서는 객체로 구현된 몇 가지를 살펴보자. 제일 먼저 정수나 실수 같은 숫자들은 루비에서 단순히 그냥 값이 아니라 각각 Integer 클래스와 Float 클래스의 인스턴스 즉, 객체이다. 아래 그림을 보면 실제로 1.class의 결괏값은 Integer, 1.0.class의 결괏값은 Float 클래스인 것을 볼 수 있다. Integer 클래스와 Float 클래스에 대해 호출한 ancestors 메서드의 결과를 보면 두 클래스 모두 Numeric클래스를 .. 2024. 9. 27.
달력 만들기 오늘은 화면에 달력을 표시해 주는 프로그램을 만들어 보겠다. 우선 테스트를 위한 프로그램 코드와 실행한 화면을 보자.require './calendar'cal = Calendar.newcal.prev_month.printputscal.printputscal.next_month.printCalendar 객체를 생성해서 print 메서드를 호출하면 화면에 달력을 표시해 주는데, prev_month 메서드와 next_month 메서드를 사용하면 쉽게 지난달과 다음달 정보를 갖는 Calendar 객체를 가져올 수 있다. 이제 아래 Calendar 클래스의 소스 코드를 하나씩 살펴보도록 하자.require 'date'class Calendar attr_reader :year, :month attr_writer.. 2024. 9. 25.
Enumerable 파헤치기4 오늘은 'Enumerable 파헤치기' 시리즈의 마지막 글로 MyEnumerable 모듈에 min, max, sum 메서드를 만들어 보자. min 메서드와 max 메서드는 인수 없이 호출하면 각각 가장 작은 값을 갖는 요소 하나와 가장 큰 값을 갖는 요소 하나를 돌려주고, 인수로 정수를 주면 해당하는 수만큼의 요소를 새 배열에 담아 돌려준다. 그리고 호출 시 요소들의 크기를 비교하는 블록을 전달하면 해당 블록의 실행 결괏값을 기준으로 최솟값과 최댓값을 구한다. sum 메서드는 모든 요소의 합을 구해주는데, 요소가 참조하는 객체에 정의된 + 연산자 메서드를 사용하여 요소끼리 더해지게 된다. 즉, 요소가 참조하는 객체가 숫자라면 수학적인 덧셈을 통해 구한 합이 반환되고 만약 요소가 참조하는 객체가 문자열이라.. 2024. 9. 23.
Enumerable 파헤치기3 오늘은 지난 글에 이어 MyEnumerable 모듈에 몇 가지 메서드를 더 만들어 보겠다. 우선 sort_by 부터 시작해 보자. sort_by 메서드는 실행 시 블록을 받아 블록의 결괏값을 기준으로 정렬을 해주는 메서드이다. 다음 그림을 보면 sort 메서드와 sort_by 메서드의 차이를 알 수 있다. sort 메서드도 블록을 받아 정렬 기준을 변경할 수는 있지만 블록의 결괏값은 0, 양수, 음수 중 하나여야 한다. 즉 블록에 전달된 두 요소를 비교한 결괏값이 블록의 결괏값이라고 간주하다. 그에 반해 sort_by 메서드는 블록의 결괏값 자체를 가지고 비교를 하여 원래 요소들의 정렬 순서를 결정한다. 그래서 숫자 배열의 경우 내림차순 정렬을 위해 sort 메서드에 블록을 전달하여 두 요소의 순서를 바.. 2024. 9. 20.