강좌 목록으로 돌아가기
AI035 Professional

프로그래밍 루비: 실용주의 프로그래머의 가이드 (2판)

Ruby 프로그래밍 언어에 대한 포괄적인 참조 및 튜토리얼로, 기본 구문, 객체 지향 설계, 반사 및 스레딩과 같은 고급 기능, 그리고 버전 1.8용 완전한 라이브러리 참조를 다룹니다.

4.9
45.0h
515 학생들
0 좋아요
인공지능
수강 시작하기

강좌 개요

📚 콘텐츠 개요

루비 프로그래밍 언어에 대한 포괄적인 참조 및 튜토리얼로, 기본 구문, 객체 지향 설계, 반사 및 스레딩과 같은 고급 기능을 다루며, 버전 1.8의 완전한 라이브러리 참조를 포함한다.

루비 언어에 대한 결정적 가이드를 통해 우아하고 강력한 프로그래밍의 예술을 익히세요.

저자: 데이브 토머스, 채드 파울러, 앤디 헌트

감사의 말: 루비 메일링 리스트 리뷰어들, 마츠무토 유키히로(마츠), 채드 파울러, 김 윙셋, 그리고 프래그매틱 프로그래머 커뮤니티.

🎯 학습 목표

  1. 이진 파일, 소스 코드 또는 CVS 방법을 사용하여 루비 환경을 설치하고 구성하며, irb 및 ri와 같은 상호작용 도구를 활용한다.
  2. 루비의 이름 규칙과 객체 지향 원칙을 적용하여 메서드를 정의하고 변수를 관리한다.
  3. 기본 배열, 해시, 정규 표현식을 사용하여 데이터를 조작한다.
  4. 단일 상속, super, 믹스인을 사용하여 클래스 계층을 정의하고 구현한다.
  5. 접근 제어(공개, 비공개, 보호)와 속성으로 객체의 가시성과 데이터 무결성을 제어한다.
  6. 유닛 테스트와 통합된 견고한 컨테이너 클래스(예: SongList)를 구축한다.
  7. 다양한 진수(16진수, 8진수, 2진수)를 사용한 숫자 논리와 숫자 반복자를 활용한 제어 흐름을 구현한다.
  8. 인터폴레이션, 헤레독, 다양한 구분자 형식을 사용하여 복잡한 문자열을 구성한다.
  9. 범위를 조건부 로직에서 "전환 스위치"와 구간 검사기로 활용한다.
  10. 스플랫 연산자, 해시 기반 "키워드" 인수, 블록-프로시 전환을 사용하여 유연한 인수 목록으로 메서드를 정의하고 호출한다.

🔹 수업 1: 챕터 1-2: 루비의 기초와 시작하기 .new

개요: 이 수업은 루비 생태계에 대한 종합적인 소개를 제공하며, 이진 배포에서 소스 코드 빌드까지, 소스 코드 관리 시스템을 활용하는 설치 방법을 다룬다. 학생들은 루비의 기본 구문을 탐색하게 되며, 순수한 객체 지향 성격, 이름 규칙, 컨테이너, 제어 구조, 블록과 같은 핵심 프로그래밍 개념에 초점을 맞춘다.

학습 결과:

  • 이진 파일, 소스 코드 또는 CVS 방법을 사용하여 루비 환경을 설치하고 구성하며, irb 및 ri와 같은 상호작용 도구를 활용한다.
  • 루비의 이름 규칙과 객체 지향 원칙을 적용하여 메서드를 정의하고 변수를 관리한다.
  • 기본 배열, 해시, 정규 표현식을 사용하여 데이터를 조작한다.

🔹 수업 2: 챕터 3-4: 클래스, 객체, 변수, 컨테이너

개요: 이 수업은 루비의 객체 지향 시스템의 기초 메커니즘을 탐구하며, 상속을 통해 객체가 상태를 유지하는 방식과 메서드 조회 체인 작동 방식에 집중한다. 이후 배열과 해시 유사 논리를 활용한 실용적인 컨테이너 구현으로 넘어가며, 루비의 독특한 블록 아키텍처에 깊이 있게 들어간다—반복자, 클로저, 자원 관리에 대해 다룬다.

학습 결과:

  • 단일 상속, super, 믹스인을 사용하여 클래스 계층을 정의하고 구현한다.
  • 접근 제어(공개, 비공개, 보호)와 속성을 사용하여 객체의 가시성과 데이터 무결성을 제어한다.
  • 유닛 테스트와 통합된 견고한 컨테이너 클래스(예: SongList)를 구축한다.

🔹 수업 3: 챕터 5: 표준 타입 및 정규 표현식의 숙련

개요: 이 수업은 루비의 핵심 스칼라 타입—숫자, 문자열, 범위—에 대한 깊이 있는 탐구를 제공하며, 강력한 정규 표현식 세계로 전환한다. 학생들은 루비가 숫자 오버플로우를 자동으로 처리하는 방식, 인터폴레이션과 구분자로 문자열을 조작하는 방법, 그리고 복잡한 텍스트 처리를 위해 정규 표현식을 기능 패턴과 객체 지향 엔티티로 활용하는 방법을 배운다.

학습 결과:

  • 다양한 진수(16진수, 8진수, 2진수)를 사용한 숫자 논리를 구현하고, 숫자 반복자를 제어 흐름에 활용한다.
  • 인터폴레이션, 헤레독, 다양한 구분자 형식을 사용하여 복잡한 문자열을 구성한다.
  • 범위를 조건부 로직에서 "전환 스위치"와 구간 검사기로 활용한다.

🔹 수업 4: 챕터 6-7: 메서드 논리 및 표현식 제어

개요: 이 수업은 루비 메서드의 유연성과 표현식 중심 프로그래밍의 힘을 탐구한다. 학생들은 가변 인수를 가진 메서드를 정의하고, 블록을 동적으로 통합하며, 병렬 할당과 패턴 매칭 케이스 표현식과 같은 고급 제어 구조를 활용하는 능력을 습득한다. 내용은 루비에서는 거의 모든 것이 값으로 반환되는 표현식이라는 점을 강조하며, 간결하고 가독성이 뛰어난 논리를 가능하게 한다.

학습 결과:

  • 스플랫 연산자, 해시 기반 "키워드" 인수, 블록-프로시 전환을 사용하여 메서드를 유연하게 정의하고 호출한다.
  • 병렬/중첩 할당과 복잡한 부울 표현식을 통해 복잡한 논리를 실행한다.
  • 표현식 기반 조건문(if, unless, case)과 고급 반복자 수정자(break, redo, next)를 사용하여 흐름 제어를 구현한다.

🔹 수업 5: 챕터 8-9: 오류 처리 및 모듈화 아키텍처

개요: 이 수업은 루비에서 견고한 오류 관리와 구조적 설계를 다룬다. 예외 계층과 오류 처리(예: rescue, retry) 또는 범위를 넘어서 흐름을 제어하는 방법(예: catch, throw)을 탐구한다. 또한 모듈이 네임스페이스와 믹스인을 통해 코드 재사용을 어떻게 촉진하는지, Enumerable 모듈의 통합, 외부 파일 포함 메커니즘을 설명한다.

학습 결과:

  • 예외 클래스 계층과 비국소 제어 구조를 사용하여 회복 가능한 오류 처리를 구현한다.
  • 네임스페이싱과 믹스인을 통해 다중 클래스 기능을 제공하는 모듈을 사용하여 모듈화된 코드베이스를 구축한다.
  • 사용자 정의 클래스에 Enumerable 모듈을 적용하고, 다중 모듈 환경에서 메서드 이름의 혼란을 해결한다.

🔹 수업 6: 챕터 10-11: 입출력 작업 및 동시성

개요: 이 수업은 루비의 입력/출력(I/O) 시스템과 동시성 모델의 기초를 다룬다. 학생들은 파일, 문자열, 네트워크 소켓을 포함한 I/O 객체를 통해 외부 리소스를 관리하면서 멀티스레딩 프로그래밍을 탐색한다. 기본 파일 조작에서부터 복잡한 동기화 기법(모니터, 큐)과 외부 프로세스 관리까지 전환되며, 병렬 작업을 효율적으로 처리한다.

학습 결과:

  • 수동 및 블록 기반 리소스 관리를 사용하여 파일 작업을 수행하여 데이터 무결성을 보장한다.
  • 반복자와 StringIO 라이브러리를 사용하여 데이터 스트림을 처리하고, 유연한 I/O 처리를 가능하게 한다.
  • TCP 소켓과 HTTP 같은 고수준 프로토콜을 통해 네트워크 통신을 설정한다.

🔹 수업 7: 챕터 12-13: 테스트, 디버깅 및 최적화

개요: 이 수업은 루비에서 코드 품질과 성능을 보장하는 포괄적인 안내서이다. 테스트::유닛 프레임워크를 사용한 단위 테스트 원칙, Ruby 디버거를 통한 체계적인 디버깅 기술, 벤치마킹과 프로파일링을 통한 성능 저하 요인 식별 방법을 다룬다. 학생들은 테스트를 구조화하고, 일반적인 논리 "덫"을 해결하며, 실증 데이터 기반으로 코드를 최적화하는 방법을 배운다.

학습 결과:

  • 테스트::유닛 프레임워크와 다양한 확인 유형을 사용하여 자동화된 단위 테스트를 구현한다.
  • Ruby 명령줄 디버거와 일반적인 문제 해결 전략을 사용하여 코드 결함을 진단하고 해결한다.
  • 벤치마크 모듈과 프로파일러를 사용하여 코드 성능을 분석하고 실행 속도 저하 지점을 식별 및 수정한다.

🔹 수업 8: 챕터 14-16: 루비 생태계와 워크플로우

개요: 이 수업은 루비의 운영 환경을 탐구하며, 프로그램이 명령줄과 실행 환경을 어떻게 상호작용하고, 어떤 상호작용 도구를 활용하는지에 초점을 맞춘다. 학생들은 RDoc과 ri 시스템을 사용하여 전문 수준의 검색 가능한 문서화 및 통합 도움말 시스템을 생성하는 방법도 배운다.

학습 결과:

  • 명령줄 인수, 환경 변수, 종료 메서드를 사용하여 루비 프로그램의 동작을 제어한다.
  • 사용자 정의 프롬프트, 탭 완성, 서브세션 관리를 통해 인터랙티브 루비(irb) 워크플로우를 최적화한다.
  • RDoc 마크업, 하이퍼링크 논리, 수정자 등을 사용하여 HTML과 ri 데이터를 생성하는 구조화된 문서화를 만든다.

🔹 수업 9: 챕터 17-18: 배포 및 웹 서비스

개요: 이 수업은 루비 코드 배포 및 웹 기반 애플리케이션 개발의 필수 메커니즘을 다룬다. 루비젬 시스템을 통한 패키지 관리 및 버전 제어, CGI와 템플릿 시스템을 통한 웹 인터페이스 구현, SOAP 및 웹 서비스를 통한 분산 시스템 통합을 탐색한다.

학습 결과:

  • 젬 사양과 Rake를 사용하여 루비 라이브러리를 정의하고 패키징한다.
  • cgi.rb를 사용하여 쿼리 매개변수, 쿠키, 세션을 처리하는 동적 웹 애플리케이션을 개발한다.
  • 애플리케이션 로직과 표현을 분리하는 템플릿 시스템(ERB, Amrita)을 구현한다.

🔹 수업 10: 챕터 19-20: GUI 및 플랫폼 통합

개요: 이 수업은 루비의 Tk 라이브러리를 사용하여 그래픽 사용자 인터페이스(GUI)를 구축하는 방법을 다룬다. 기본 위젯 설정부터 고급 캔버스 관리 및 스크롤링까지 포함된다. 또한 윈도우즈 플랫폼에서의 특수 통합을 탐색하며, 자동화를 위한 성능 벤치마킹과, 윈도우 DLL에 직접 접근하기 위한 DL 라이브러리의 사용법을 다룬다.

학습 결과:

  • 위젯과 다양한 기하학적 관리자(pack, place, grid)를 사용하여 기능적인 루비 Tk 애플리케이션을 구축한다.
  • 이벤트 바인딩과 양방향 스크롤링 통신을 통해 상호작용 요소를 구현한다.
  • 기존의 Perl/Tk 문서를 유효한 루비 코드로 변환하고, 저수준 윈도우즈 API 호출을 위해 DL 라이브러리를 활용한다.

🔹 수업 11: 챕터 21: 루비 확장 (C API)

개요: 이 수업은 루비 프로그래밍 언어와 C 사이의 인터페이스를 탐구하며, 루비의 기능을 C 확장으로 확장하거나 루비 인터프리터를 C 애플리케이션에 임베딩하는 방법을 중점적으로 다룬다. 학생들은 루비 객체의 내부 표현, C 데이터 구조를 래핑하는 프로토콜, 그리고 이러한 확장을 빌드하고 구성하기 위해 필요한 도구를 배운다.

학습 결과:

  • C 환경에서 루비의 VALUE 타입과 즉시 객체를 이해하고 조작한다.
  • 사용자 정의 C 백엔드 루비 클래스를 위한 다단계 할당 및 초기화 프로토콜을 구현한다.
  • mkmf와 extconf.rb를 사용하여 루비 확장의 빌드 프로세스를 자동화한다.

🔹 수업 12: 챕터 22: 종합 언어 사양

개요: 이 수업은 루비 언어 사양에 대한 기술적 깊이 있는 탐구를 제공하며, 전문 개발에 필요한 기본 빌딩 블록을 다룬다. 학생들은 루비의 기본 데이터 타입의 미묘한 차이, 변수와 상수의 범위를 규정하는 엄격한 규칙, 그리고 표현식과 메서드 인수의 메커니즘을 탐색한다.

학습 결과:

  • 정수, 문자열, 심볼 등 다양한 기본 타입을 구분하고, %w와 %q와 같은 약어 표기법을 적용한다.
  • 글로벌, 클래스, 인스턴스, 지역 수준에서 변수 범위와 상수 가시성을 관리한다.
  • 부울 표현식, 케이스 문, 반복자 수정자를 사용하여 복잡한 제어 흐름을 구현한다.

🔹 수업 13: 챕터 23-24: 덱 타이핑과 객체 호출

개요: 이 수업은 루비가 메서드 호출, 객체 정의, 오류 처리를 통해 코드를 실행하는 메커니즘을 탐구하며, 결국 "덕 타이핑" 철학으로 이어진다. 학생들은 블록과 프로시를 사용하여 유연한 인터페이스를 정의하고, 루비의 예외 및 강제 변환 프로토콜을 활용하여 견고한 시스템을 구현하는 방법을 배운다.

학습 결과:

  • super와 alias를 사용하여 복잡한 메서드 조회를 실행하고 메서드 동작을 조작한다.
  • 클래스/모듈 정의와 속성 선언을 사용하여 구조화된 코드베이스를 구축한다.
  • 블록, 클로저, 프로시 객체를 사용하여 함수형 프로그래밍 패턴을 구현한다.

🔹 수업 14: 챕터 24-25: 고급 객체 및 보안

개요: 이 수업은 루비 객체의 내부 아키텍처를 탐구하며, 인스턴스, 클래스, 메타클래스 간의 복잡한 관계에 초점을 맞춘다. 학생들은 객체 전용 클래스와 메타프로그래밍 기법을 통해 동적 행동을 습득하며, 루비의 내장된 안전 수준과 데이터 테이닝 메커니즘을 사용하여 애플리케이션을 보호하는 방법을 배운다.

학습 결과:

  • 클래스와 객체 간 상호작용을 조절하는 내부 포인터 구조(klass 및 super)를 매핑한다.
  • 싱글톤 클래스를 사용하여 객체 전용 동작을 구현하고, 클래스 인스턴스 변수를 통해 상태를 관리한다.
  • 메타프로그래밍과 객체 고정을 활용하여 견고하고 불변 또는 동적으로 생성된 코드를 만들 수 있다.

🔹 수업 15: 챕터 26-28: 반사 및 표준 라이브러리

개요: 이 모듈은 루비의 강력한 내부 탐색 능력을 탐구하며, 개발자가 객체와 클래스 내부를 들여다보고, 동적으로 메서드를 호출하며, 마샬링과 YAML을 통해 객체 직렬화를 관리할 수 있도록 한다. 또한 루비 표준 라이브러리에 대한 포괄적인 참조 및 적용 가이드를 제공하며, 핵심 클래스, 네트워킹 프로토콜, 데이터 저장, 시스템 유틸리티를 다룬다.

학습 결과:

  • 반사 기능 구현: 객체 공간, respond_to?, send를 사용하여 런타임에서 객체를 검사하고 조작한다.
  • 직렬화 마스터링: 마샬링과 YAML 전략을 적용하여 객체 상태를 저장하고, 분산 루비(DRb) 통신을 촉진한다.
  • 표준 라이브러리 활용: 네트워킹(Net::HTTP), XML/웹(REXML, CGI), 데이터 저장(PStore, CSV, SDBM)을 위한 특화 모듈을 탐색하고 활용한다.