Ruby
-
Programming Ruby (26) 단위테스트 - 2Ruby 2016. 11. 14. 22:14
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 테스트 구조화 다음 코드를 통해 단위 테스트를 위한 테스트 프레임워크를 읽어 들일 수 있다. require 'test/unit' 순수하게 MiniTest만을 사용하는 경우 아래와 같이 사용한다. require 'minitest/unit' 단위 테스트는 테스트케이스(test case)라 불리는 고수준 그룹과 테스트 메서드 자체인 저수준 그룹으로 나뉜다. 테스트 케이스는 일반적으로 특정코드 또는 기능에 관련된 모든 테스트를 포함한다. 테스트 케이스 안에서도, 단언문을 몇 개의 테스트 메서드로 분류하고 구성해서 넣을 수 있다. 테스트 케이스를 표현하는 클래스는 Test::Unit::TestC..
-
Programming Ruby (25) 단위테스트 - 1Ruby 2016. 11. 10. 20:13
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 단위 테스트는 작은 코드 덩어리, 즉 일반적인 각 메서드와 메서드에 포함된 각 줄을 대상으로 테스트를 수행한다. 시스템 전체를 하나의 테스트 대상으로 보는 다른 테스트와는 대조된다. 소프트웨어는 결국 계층 구조를 이루고 있기 때문에 테스트 대상을 작게 잡아야 한다. 특정 위치에 있는 코드들은 그 아래 계층의 코드가 정상으로 작동해야만 문제없이 작동한다. 아래 계층의 코드에 버그가 있다면 그 위의 계층 역시 이에 영향을 받을 수 있다. 단위 테스트는 프로그래머가 더 좋은 코드를 작성하는 데 도움을 준다. 이는 코드를 실제로 작성하기 전에 테스트에 대해 생각해 보게 함으로써 자연스럽게 더 ..
-
Programming Ruby (24) 파이버, 스레드, 프로세스 - 2Ruby 2016. 11. 8. 23:26
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 스레드 스케줄러 제어하기 Thread 클래스는 스레드 스케줄러 제어 메서드를 제공한다. Thread.stop은 현재 스레드를 멈추고, Thread#run은 특정한 스레드가 실행되도록 한다. Thread.pass는 다른 스레드가 실행되도록 현재 스레드의 제어권을 넘겨주며, Thread#join과 Thread#value는 주어진 스레드가 끝날 때까지 호출한 스레드의 실행을 연기한다. join과 method가 일반적인 프로그램에서 사용하는 저수준의 스레드 메서드라고 할 수 있다. 나머지 수준의 스레드 제어 메서드들은 제대로 사용하기에 위험이 크다. 다행히도 루비에서는 고수준 스레드 동기 기능..
-
Programming Ruby (23) 파이버, 스레드, 프로세스 - 1Ruby 2016. 11. 8. 22:01
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 루비는 프로그램의 다른 부분을 '동시에' 실행하는 기본적인 두 가지 방법을 제공한다. 파이버를 사용하면 프로그램의 일부분을 정지하고 다른 부분을 실행할 수 있다. 파이버보다 작업간의 결합도가 적은 방법으로는 다수의 스레드를 사용하는 방법과 다수의 프로세스를 분리하는 방법이다. 파이버 루비 1.9에서 파이버가 도입되었다. 파이버는 단순한 코루틴 메커니즘이다. 이를 사용하면 스레드 고유의 복잡한 처리 없이도 스레드 사용하는 것처럼 프로그램을 작성할 수 있다. 다음 예제는 택스트 파일을 분석해 출현횟수를 계산한다. 먼저 파이버를 사용하지 않고 반복문으로 구현한다. counts = Hash.n..
-
Programming Ruby (22) 기본 입출력 - 2Ruby 2016. 11. 7. 23:52
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 네트워크로 통신하기 Socket 클래스를 이용해 HTTP OPTIONS 요청을 사용해서 로컬 엡 서버에 있는 사용자 웹 사이트에 대한 정보를 가져오는 예제이다. require 'socket' client = TCPSocket.open('127.0.0.1', 'www') client.send("OPTIONS /~dave/ HTTP/1.0\n\n", 0) # 0은 표준 패킷을 의미한다. puts client.readlines client.close 실행결과 HTTP/1.1 200 OK Date: Thu 14 nov ~~ Server: Apache/2.2.24 Allow: GET,HEAD,P..
-
Programming Ruby (21) 기본 입출력 - 1Ruby 2016. 11. 7. 23:50
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) IO 객체 루비는 입/출력을 담당하는 기본 클래스 IO를 제공한다. IO객체는 루비프로그램과 외부 리소스 사이의 양방향 채널 역할을 한다. IO객체는 결국 일과 쓰는 것이 전부이다. 파일 열고 닫기 파일 객체는 File.new 메서드를 이용해서 생성할 수 있다. file = File.new("testfile", "r") # ... 파일에 대한 처리 file.close 첫 번째 매개변수는 파일이름, 두 번째 인자는 모드 문자열, 읽기 모드, 쓰기 모드, 읽기 쓰기모드로 File 객체 생성이 가능하다. (읽기 쓰기모드는 r+, 쓰기모드는 w, 읽기 모드 r) File.open 메서드는 파일..
-
Programming Ruby (20) 예외처리 - 2Ruby 2016. 11. 5. 11:38
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) Catch와 Throw raise와 rescue 메커니즘은 무언가 잘못되었을 때 실행을 멈추는데 효과적이다. 일반적인 실행 중에 여러 겹으로 둘러싸인 코드 밖으로 탈출할 수 있다면 유용할것이다. 이 때 사용하는 문법이 catch throw 이다. 아래의 예제는 한 번에 하나씩 단어 리스트를 읽어와 배열에 추가한다. 전부 읽어오고 나서 배열을 역순으로 출력한다. 처리 과정에서 정상적인 단어를 포함하지 않는 줄을 만나면 모든 과정을 중지한다. word_list - File.open("wordlist") catch (:done) do result = [ ] while line = word_l..
-
Programming Ruby (19) 예외처리Ruby 2016. 11. 3. 23:59
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 예외 처리 현실 세계의 프로그램에서는 에러가 발생한다. 좋은 프로그램은 이러한 에러를 예견하고 깔끔하게 해결해야만 한다. 전통적인 접근 방법은 반환 코드를 이용하는 것이다. 파일을 열고 시도하는 예를 들어보자. open 메서드는 실패를 나타내는 특별한 값을 반환한다. 이 에러값은 누군가가 처리해 줄 때까지 메서드 호출 단계를 거슬러 올라가며 전달된다. 이 접근법의 문제점은 모든 에러 코드를 관리하는 것이 어렵다는 것이다. 어떤 함수가 open을 호출하고, 그 다음 read, 마지막으로 close를 호출하는데 각각이 에러 코드를 반환하면 이 함수는 호출자에게 건넬 반환값에서 이 에러 코드..