Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby

  1. Ruby에서 배열과 해시를 정렬하는 완벽 가이드 (sort, sort_by 예제 포함)

    Ruby에서 배열을 정렬하는 것은 아주 간단합니다! 원하는 결과를 얻기 위해 복잡한 알고리즘을 직접 작성할 필요가 전혀 없습니다. 그렇다면 무엇이 필요할까요? 바로 Ruby의 내장 정렬 메서드를 이해하는 것입니다. 대표적인 메서드는 다음과 같습니다: sort sort_by sort! 이 메서드들은 어떻게 동작하며, 왜 서로 다를까요? 이 글에서 그 답을 확인할 수 있습니다. sort 메서드부터 시작해서, 여러 값을 기준으로 정렬할 수 있는 고급 기법인 sort_by까지, 배열을 정렬하는 다양한 방법을 배워보겠습니다. 그럼 시작해

  2. Ruby로 배우는 연결 리스트(Linked List) 완벽 가이드

    이 글은 Ruby로 배우는 실용적인 컴퓨터 과학 시리즈의 세 번째 포스팅입니다. 오늘은 연결 리스트(Linked List)에 대해 알아보겠습니다. 그렇다면 연결 리스트란 무엇일까요? 이름 그대로, 연결 리스트는 데이터를 리스트 형태로 저장하는 자료 구조입니다. 연결(Linked)이라는 이름은 데이터가 노드(Node) 단위로 저장되고, 이 노드들이 순서대로 서로 연결되어 있다는 데서 유래했습니다. 연결 리스트 vs 배열 연결 리스트는 배열과 다른 성능 특성을 가지고 있습니다. 바로 이 차이 때문에 상황에 따라 둘 중 하나를 선택하게

  3. Sinatra 작동 원리 완벽 분석: 초기화부터 요청·응답 처리까지

    Sinatra는 Ruby로 만들어진 가볍고 우아한 웹 프레임워크입니다. Rails의 막내 동생이라 불릴 만큼 단순하면서도 강력한 기능을 제공합니다… 이번 글에서는 Sinatra의 작동 방식을 자세히 살펴보겠습니다: 프로젝트에서 Sinatra를 require하면 어떤 일이 일어날까요? 라우트 매칭은 어떻게 이루어질까요? 요청과 응답은 어떻게 처리될까요? 궁금한 점은 많은데 시간은 부족하죠… 걱정 마세요! 제가 직접 소스 코드를 파헤쳐 이 질문들의 답을 한곳에 모았습니다. 이 글 하나로 더 빠르게 학습하세요! Sinatra 초기화

  4. 코드 읽기 모험: Awesome Print 젬의 내부 동작 원리 파헤치기

    awesome_print는 irb나 pry에서 출력 결과를 훨씬 읽기 쉽게 포맷해 주는 유용한 Ruby 젬입니다. 예를 들어… 다음은 awesome_print로 해시(Hash)를 화면에 표시했을 때의 모습입니다: 그런데 이건 대체 어떻게 작동하는 걸까요? 진실은 오직 한 곳에서만 찾을 수 있다. 바로 코드 안에서다. ― 로버트 C. 마틴(Robert C. Martin) 그럼 소스 코드를 직접 들여다보며 그 비밀을 밝혀봅시다! 멋진 출력의 시작 저는 코드 리딩 세션을 시작할 때 프로젝트 구조(파일과 폴더)를 빠르게 훑어본 뒤, 이후

  5. 더 나은 Ruby 코드를 위한 숨겨진 보석 같은 메서드 7가지

    적절한 Ruby 메서드를 활용하면 많은 작업을 절약할 수 있다는 사실을 알고 계셨나요? 익숙하게 사용할 수 있는 메서드가 많을수록 동작하는 코드를 더 빠르게 작성할 수 있으며, 성능과 품질 모두에서 더 나은 결과물을 얻을 수 있습니다. 그래서 오늘은 여러분이 아직 접해보지 못했을 만한 흥미로운 메서드 7가지를 소개해 드리려고 합니다. 1. Integer#digits 메서드 (Ruby 2.4) Ruby 2.4에서 새롭게 도입된 이 메서드는 정수(Integer)의 개별 자릿수를 다룰 때 매우 유용합니다. 참고: Ruby 2.4의 변경

  6. 루비 Array#zip 메서드 완벽 가이드: 두 배열을 우아하게 다루는 방법

    두 개의 배열을 요소별로 비교해서 차이점을 찾고 싶다고 가정해 봅시다. 아니면 각 인덱스에서 가장 큰 숫자를 찾거나, 키 목록과 값 목록을 합쳐서 해시를 만들고 싶을 수도 있습니다. 이런 작업을 어려운 방식으로 처리하면 대략 아래 코드처럼 됩니다. 전통적인 방식의 문제점 예제: a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 물론 원하는 결과는 얻을

  7. Ruby Transpose 메서드로 행과 열을 자유롭게 변환하는 방법

    오늘은 Ruby의 transpose 메서드를 활용해 다차원 배열(그리드)을 손쉽게 다루는 방법을 알아보겠습니다. 3×3 정사각형 형태의 다차원 배열이 있다고 가정해 봅시다. 그리고 이 배열의 행(row)을 열(column)로 변환하고 싶다고 해보죠. 왜 이런 작업이 필요할까요? 대표적인 예가 바로 틱택토(Tic-Tac-Toe) 게임입니다. 게임 보드를 그리드 형태로 저장한 뒤, 승리 조건을 확인하려면 행, 열, 대각선을 모두 검사해야 하기 때문입니다. 그런데 여기에 문제가 하나 있습니다. 그리드를 배열로 저장하면 행에는 직접 접근할

  8. Ruby 2.5 성능 개선 총정리: 문자열 보간부터 Enumerable까지, 벤치마크로 검증한 최적화

    Ruby는 새 버전이 출시될 때마다 꾸준히 성능이 향상되어 왔으며, Ruby 2.5 역시 예외가 아닙니다. Ruby 2.5에 도입된 주요 최적화는 다음과 같습니다. 큰 문자열을 생성할 때 문자열 보간(string interpolation) 속도가 약 72% 향상됩니다 인자가 하나만 전달될 때 String#prepend 속도가 약 42% 향상됩니다 Enumerable#sort_by, Enumerable#min_by, Enumerable#max_by 속도가 약 50% 향상됩니다 그럼 실제 벤치마크 결과를 함께 살펴보겠습니다! 문자열

  9. Ruby와 Sinatra로 나만의 링크 단축 서비스 만들기

    Ruby 실력을 연습하면서 재미있는 작은 프로젝트를 찾고 계신다면, 정확히 올바른 곳에 오셨습니다. 오늘은 여러분과 함께 링크 단축 서비스를 처음부터 끝까지 직접 만들어 보겠습니다. 링크 단축 서비스란? 한 번쯤은 본 적이 있을 겁니다. 다음과 같은 형태의 짧은 링크 말이죠. https://t.co/eKBRm2tTUF 이 URL에 접속하면 원래의 긴 URL로 자동으로 이동(리디렉션)됩니다. 그런데 어떻게 이런 일이 가능할까요? 핵심 아이디어는 아주 간단합니다. 위 예시의 eKBRm2tTUF 같은 짧은 코드를 데이터베이스에서 원본

  10. Atom 에디터로 Ruby 개발 생산성 높이기: 필수 패키지, 스니펫, 단축키 총정리

    Ruby 개발에 Atom 에디터를 사용하고 있다면, 생산성을 크게 높여주는 플러그인(Atom에서는 패키지라고 부릅니다)이 있다는 것을 이미 알고 계실 겁니다. 하지만 문제가 있습니다. Atom의 패키지 저장소에는 수천 개의 패키지가 존재한다는 점이죠! 과연 어떤 것들을 사용해야 할까요? 더불어 작업 속도를 빠르게 해줄 유용한 키보드 단축키에는 어떤 것들이 있을까요? Atom 사용자라면 이 글이 정확히 여러분에게 필요한 정보일 것입니다. 지금부터 하나씩 살펴보겠습니다. 추천 Atom 패키지 BEST Atom 패키지는 에디터에 새로운

  11. 루비(Ruby)로 접두사 트리(Trie) 구현하고 활용하는 방법

    접두사 트리(prefix tree, 흔히 트라이(trie)라고도 불립니다)는 단어 목록을 체계적으로 정리하고, 특정 접두사로 시작하는 단어를 빠르게 찾아낼 수 있게 도와주는 자료구조입니다. 예를 들어 사전에 있는 단어 중 ca로 시작하는 모든 단어, 즉 cat이나 cape 같은 단어들을 손쉽게 찾을 수 있습니다. 다음 그림을 살펴보세요. 이것이 바로 접두사 트리입니다. 루트(*)에서 출발해 마킹된 노드(예: e, t)까지 경로를 따라가면 하나의 단어를 찾을 수 있습니다. 이 글에서는 루비로 직접 접두사 트리를 구현하는 방법과, 이

  12. 루비(Ruby)는 오류를 숨기고 있습니다! 숨겨진 예외 파헤치기

    루비(Ruby)는 의도적으로 일부 오류와 예외를 개발자에게서 숨기곤 합니다. 때로는 이런 동작이 유용할 수 있습니다. 예를 들어 블록과 함께 Kernel#loop 메서드를 사용하면, StopIteration 예외가 발생했을 때 loop가 자동으로 종료됩니다. 하지만 다른 경우에는 디버깅 작업을 훨씬 더 어렵게 만들 수 있습니다. 구체적인 예시를 통해 살펴보겠습니다! 숨겨진 예외 #1: Comparable 모듈과 <=> 메서드 첫 번째 예시는 Comparable 모듈과 <=> 메서드와 관련이 있습니다. 예시 코드

  13. 루비 nil 완벽 가이드: 반드시 알아야 할 모든 것

    Nil… 대체 무엇일까요? nil은 루비(Ruby)에서 빈 값 또는 기본값을 나타내는 특별한 객체입니다. 또한 false처럼 동작하는 falsy(거짓 같은) 값이기 때문에, 조건문에서 사용하면 거짓으로 평가됩니다. 중요한 점: nil 객체는 루비 전체에서 단 하나만 존재하며, object_id는 4입니다(64비트 루비에서는 8). 이것이 nil이 특별하게 취급되는 이유 중 하나입니다. nil.object_id # 4 이제 더 깊이 들여다보겠습니다! Nil 값은 어디에서 오는 걸까? 많은 메서드가 결과로 nil을 반환할 수 있습니

  14. Ruby 문자열(String) 메서드 완벽 가이드: 실전 예제로 배우는 21가지 핵심 기능

    문자열(string)은 문자들의 연속된 나열입니다. Ruby에서 문자열은 객체이기 때문에 다양한 메서드를 활용해 원하는 작업을 수행할 수 있습니다. 이 글에서는 가장 유용한 Ruby 문자열 메서드들을 실제 예제와 함께 자세히 살펴보겠습니다! 1. 문자열 길이 구하는 방법 아주 간단합니다: ruby.size # 4 size 대신 length를 사용할 수도 있으며, 두 메서드는 완전히 동일하게 동작합니다. 2. 문자열이 비어 있는지 확인하는 방법 빈 문자열(empty string)은 길이가 0인 문자열을 의미합니다. 다음과 같이

  15. Ruby 함수형 프로그래밍 완벽 가이드: 핵심 개념부터 실전 활용까지

    최근에 함수형 프로그래밍이라는 용어를 접했다면 자연스럽게 몇 가지 궁금증이 생기기 마련입니다. 함수형 프로그래밍이 정확히 무엇일까? 객체지향 프로그래밍(OOP)과는 어떻게 다를까? Ruby에서도 함수형 프로그래밍을 활용해야 할까? 이 글에서 이러한 질문들에 차근차근 답하며, 함수형 프로그래밍이 어떻게 동작하는지 명확하게 이해하실 수 있도록 안내해 드리겠습니다. 함수형 프로그래밍이란 무엇인가? 함수형 프로그래밍은 단순한 유행이나 화려한 용어가 아니라, 오랜 역사를 지닌 실제 프로그래밍 패러다임입니다. 다만 최근에 들어서야 다시 큰

  16. Ruby 심볼(Symbol) 완벽 가이드: 개념부터 Symbol GC까지

    Ruby의 심볼(symbol)은 다음과 같은 형태로 생겼습니다: :testing 일부 사람들은 심볼을 변수와 혼동하기도 하지만, 사실 심볼은 변수와는 아무런 관련이 없습니다… …심볼은 오히려 문자열과 훨씬 더 유사한 존재입니다. 그렇다면 Ruby에서 심볼과 문자열은 어떤 차이가 있을까요? 문자열은 데이터를 다룰 때 사용됩니다. 반면 심볼은 식별자(identifier)입니다. 이것이 바로 핵심적인 차이입니다: 심볼은 단순히 또 다른 종류의 문자열이 아니라, 서로 다른 목적을 가진 별개의 존재입니다. 심볼을 사용해야 하는 경우 심볼의

  17. Ruby C 확장 작성 방법: 단계별 따라하기 가이드

    C 확장(C Extension)을 작성하면 C 언어에서 Ruby 객체를 다루고 상호작용할 수 있습니다. 성능이 중요한 특정 메서드를 C의 빠른 속도로 최적화하고 싶거나, 기존에 작성된 C 라이브러리를 Ruby에서 사용할 수 있도록 인터페이스를 만들고 싶을 때 확장 작성이 유용합니다. 참고로 이런 작업에는 FFI 모듈이라는 대안도 있습니다. 그럼 지금부터 C 확장을 작성하는 방법을 하나씩 살펴보겠습니다! 첫 번째 C 확장 만들기 먼저 extconf.rb라는 이름의 파일을 만들고 아래 내용을 입력합니다: require mkmf cr

  18. Ruby 개발자를 위한 시간 복잡도 완벽 가이드

    시간 복잡도(Time Complexity)는 컴퓨터 과학에서 배울 수 있는 가장 흥미로운 개념 중 하나이며, 전공 학위 없이도 누구나 이해할 수 있습니다! 시간 복잡도가 흥미로운 이유는 특정 알고리즘이나 프로그램이 느려지는 원인을 파악하고, 이를 더 빠르게 만들 방법을 찾는 데 결정적인 도움을 주기 때문입니다. 여러분이 직접 작성한 코드에도 바로 적용할 수 있습니다. 그리고 이 개념은 컴퓨터 과학 교재에 나오는 화려한 알고리즘에만 국한되지 않습니다. 이 글 후반부에서 직접 확인해 보겠습니다. 먼저 느리다와 빠르다가 무엇을 의미하는지

  19. TCmalloc으로 Ruby 메모리 할당 프로파일링하기

    Ruby에서 메모리 할당은 어떻게 이루어질까요? Ruby는 페이지(page)라고 불리는 일정한 덩어리 단위로 메모리를 확보하며, 새롭게 생성된 객체들은 이 페이지 안에 저장됩니다. 그런데… 페이지가 가득 차면 추가적인 메모리가 필요해집니다. 이때 Ruby는 malloc 함수를 통해 운영체제에 더 많은 메모리를 요청합니다. malloc 함수는 운영체제 자체에 포함된 기능이지만, 상황에 따라 다른 구현체로 교체하여 사용할 수도 있습니다. 그중 하나가 바로 구글(Google)의 tcmalloc입니다. TCmalloc은 Goo

  20. Ruby에서 메모리 누수 직접 만들어 보기: 누수의 두 가지 얼굴

    메모리 누수(memory leak)를 찾는 방법을 다룬 글은 이미 많이 있습니다. 하지만 오늘은 반대로, 누수를 직접 만들어 보는 방법을 살펴보겠습니다. 누수를 스스로 만들어 보면 Ruby에서 메모리 누수가 실제로 어떤 모습인지 감각적으로 익힐 수 있고, 실전 디버깅에서도 큰 도움이 됩니다. 그럼 몇 가지 예제를 살펴보겠습니다. 1. 가장 간단한 누수: 배열에 객체 계속 쌓기 배열에 새 객체를 계속 추가하기만 해도 메모리 누수를 만들 수 있습니다. 핵심은 객체가 계속 참조되고 있다는 점입니다. a = [] b = {} loop

Total 598 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:18/30  20-컴퓨터/Page Goto:1 12 13 14 15 16 17 18 19 20 21 22 23 24