본문 바로가기

분류 전체보기100

JSON 다루기2 이번 글에서는 해시나 배열 등의 객체를 JSON 포맷으로 변환하는 기능을 직접 만들어 보자. 아래 코드를 보면 인수로 받은 data가 해시인지 배열인지 아니면 그 밖의 다른 객체(문자열, 숫자, 불린 등)인지에 따라 처리를 다르게 하고 있다. 그중 해시나 배열의 경우 여러 요소(객체)를 포함하고 있고, 해당 요소들 역시 JSON 포맷으로 변경해야 하기 때문에 재귀 호출을 사용한다. module MyJSON def self.generate(data, options = {}, depth = 1) indent = options[:indent] || "" space = options[:space] || "" object_nl = options[:object_nl] || "" array_n.. 2025. 3. 7.
JSON 다루기 지난번 글에서는 배열에 담긴 데이터를 CSV 포맷으로 파일에 저장하고, 다시 CSV 파일로부터 배열을 생성하는 방법을 알아보았다. 이번 글에서는 해시 등 객체에 담긴 데이터를 JSON 포맷의 문자열로 변환하고 다시 JSON 포맷의 문자열을 파싱하여 해시 등 객체를 생성하는 방법을 알아보자. JSON(JavaScript Object Notation)은 텍스트 기반의 데이터 저장 및 전송을 위한 포맷이다. 이름과는 달리 특정 프로그래밍 언어에 종속되지 않고 현재 주로 사용하는 대부분의 언어들은 모두 JSON을 쉽게 처리할 수 있도록 라이브러리를 제공한다. JSON은 키-값 쌍의 집합을 중괄호({ })로 묶어 객체를 표현하고, 쉼표로 구분된 값들을 대괄호([ ])로 묶어 배열을 표현한다. 그리고 JSON에서 .. 2025. 3. 6.
CSV 다루기 프로그램을 개발하다 보면 어떤 데이터들은 장기적으로 보관할 수 있는 저장소에 저장해야 할 필요가 있다. 그러한 저장소로써 가장 일반적으로 사용되는 것이 파일 시스템과 데이터베이스이다. 그중 파일 시스템과 관련해서는 이미 '도서 관리 프로그램'을 통해서 파일에 도서 관련 데이터를 저장하고 다시 파일로부터 데이터를 읽어오는 코드를 작성해 보았다. 그런데, 도서 관리 프로그램에서는 프로그램 고유의 규칙을 정해서 파일에 데이터를 저장했었지만, 이미 컴퓨터 프로그래밍 분야에서 널리 사용되는 CSV, JSON, YAML 등의 포맷 규칙이 있다. 이번 글에서는 CSV를 살펴보려고 한다. CSV는 'Comma-Separated Values'의 약자로서 말 그대로 값들을 콤마(,)로 구분하여 파일에 저장하는 포맷이다. .. 2025. 2. 28.
메소드 탐색3 메서드 탐색과 관련하여 대상 객체의 클래스에서 바로 메서드를 찾는 단순한 경우부터 싱글톤 클래스에 대한 탐색 경로를 따라가는 것까지 여러 가지 경우를 살펴봤다. 그러나 아직 살펴보지 않은 게 하나 남아 있다. 만약 메서드 탐색 경로를 따라 메서드를 찾아 나섰지만 해당 메서드를 끝내 찾지 못했다면 어떻게 될까? 단순히 예외를 발생시키고 마는 걸까? 그렇지 않다.  아래 그림을 보면 클래스 C1과 C2 모두 foo 메서드를 정의하지 않았고 foo 메서드를 정의한 어떤 모듈도 인클루드하지 않았다. 실제 C1과 C2 클래스의 인스턴스 메서드 목록에는 foo 메서드가 포함되어 있지 않은 걸 볼 수 있다. 그런데 C1의 객체에 대해 foo 메서드를 호출하면 예상대로 예외가 발생하지만 C2의 객체에 대해 foo 메서.. 2025. 2. 26.