분류 전체보기100 Enumerable 파헤치기2 오늘은 지난 글에 이어 MyEnumerable 모듈에 map 메서드를 만들어 보겠다. 당연히 MyEnumerable 모듈을 인클루드하는 클래스에서 each 메서드를 정의해 놓았다고 가정한다. 아래 코드를 보면 map 메서드에서도 each 메서드의 블록 안에서 map 메서드에 전달된 블록을 실행해 주고 있고 그 블록의 결괏값을 result 변수가 참조하는 배열에 담고 있다. 이때 result 변수는 map 메서드에서 정의한 것이고 클로저를 통해 each 블록 안에서 접근하고 있다. 결국 map 메서드 역시 each 메서드를 사용해야 하므로 each_with_index 와 거의 동일한 패턴으로 작성한 것을 볼 수 있다. 그리고 map 메서드는 최종 결과로 map 에 전달된 블록의 실행 결괏값을 모은 resu.. 2024. 9. 13. Enumerable 파헤치기1 예전에 모듈에 대해 3편에 걸쳐 설명한 적이 있었는데, 오늘은 루비 스스로 모듈을 어떻게 사용하고 있는지를 아주 잘 보여주는 Enumerable 모듈에 대해 살펴볼까 한다. Array 클래스와 Hash 클래스 모두 Enumerable 모듈을 인클루드하고 있고 우리가 자주 사용하는 배열과 해시의 메서드들 중 상당 수가 Enumerable 모듈에서 정의한 메서드들이다. Enumerable 모듈은 자신을 인클루드하는 클래스가 each 인스턴스 메서드를 제공해 주기만 하면 each 메서드를 기반으로 동작하는 많은 메서드들을 무상으로 제공해 준다. each 메서드는 이미 많이 사용해 봤듯이 블록과 함께 호출하면 블록 파라미터에 값을 전달하면서 블록을 반복하여 실행해 주는 역할을 한다. 이게 무슨 말인지 Enume.. 2024. 9. 11. 텍스트 칼라 출력 기능 만들기2 오늘은 지난번에 만들었던 MyColor 모듈의 코드를 메타프로그래밍을 사용하여 조금 더 다듬어 볼까 한다. 메타프로그래밍이란 여러 의미를 담고 있지만 여기서는 '프로그램 코드를 동적으로 생성한다' 는 의미 정도로 생각해도 좋을 것 같다. 우리가 지금까지 여러 번 사용해 왔던 attr_reader, attr_writer, attr_accessor 등의 메서드들도 메타프로그래밍을 지원하는 기능들 중 일부라고 생각하면 된다. 아래 MyColor 모듈의 ColorableText 클래스의 코드를 보면 red, yellow, blue, green 의 메서드들이 모두 메서드 안에서 사용하는 ANSI 이스케이프 코드만 다를뿐 다른 모든 내용은 동일하다는 것을 알 수 있다.module MyColor def MyColo.. 2024. 9. 10. 텍스트 칼라 출력 기능 만들기1 지난 '데이터 정렬해서 출력하기' 글에서 rainbow gem을 사용하여 텍스트에 색깔을 쉽게 입힐 수 있었는데 오늘은 rainbow gem이 제공하는 기능 중 아주 일부를 간단하게 만들어 볼까 한다. 다시 감을 잡기 위해 지나번 마지막 예제를 다시 한번 보자.위의 그림을 보면 문자열 "Ruby" 를 Rainbow 메서드에 인수로 주고 그 결과에 대해 yellow 메서드를 호출했더니 원본 문자열 "Ruby" 가 "\e[33mRuby\e[0m" 이렇게 변경된 게 보이고 동일한 방식으로 "Ruby" 를 "Java" 로만 변경해서 만든 문자열 "\e[33mJava\e[0m" 을 puts 로 출력했더니 원하는대로 노란색 글씨로 화면에 'Java' 가 출력되었다. 그렇다면 문자열을 감싸고 있는(\e[33m 와 \.. 2024. 9. 9. 이전 1 ··· 12 13 14 15 16 17 18 ··· 25 다음