티스토리 뷰
트랜잭션을 위한 블록
블록이 반복자에서 사용되기는 하지만 다른 용도로 사용될 때도 있다.
트랜잭션 제어 하에서 동작해야만 하는 코드를 작성해야 할 때 블록을 사용할 수 있다.
다음의 코드는 파일을 열고 그 내용으로 작업을 한 후에 마치면 이 파일이 닫히는 트랜잭션이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class File #open_and_process는 클래스 메서드로 생성 def self.open_and_process(*args) f = File.open(*args) yield f f.close() end end File.open_and_process("testfile", "r") do |file| while line = file.gets puts line end end | cs |
실행결과:
This is line one
This is line two
This is line three
And so on
[특징]
1. open_and_process는 클래스 메서드이다. 이 메서드가 클래스 메서드인 이유는 특정한 파일 객체에 상관없이 호출할 수 있기 때문이다.
2. 매개변수가 *args로 가변 인자 리스트로 정의되어 있다. 이것이 뜻하는 바는 "실제로 메서드에서 넘겨받는 매개변수를 모아서 배열로 만들고 args라고 이름을 붙여라"다. 이는 배열로 다시 펼쳐서 요소 각각을 매개변수로 넘긴다.
3. 파일을 열었다면 이제 open_and_process 메서드는 yield를 호출하여 방금 연 파일 객체를 블록 객체에 넘겨준다. 이렇게 함으로써 열린 파일의 핸들을 닫아야 하는 책임이 파일 객체의 사용자로부터 파일 객체 자체로 넘어가게 된다.
결국 트랜잭션을 위한 블록으로서 위와 같이 메서드를 작성하여 메서드 자체에서 파일의 열고 닫는 일련의 모든 과정들을 진행한다.
'Back-end' 카테고리의 다른 글
[루비] 상속과 메시지 (0) | 2019.02.11 |
---|---|
[루비] 객체로서의 블록 (0) | 2019.02.10 |
[루비온레일즈] 웹 소켓 (0) | 2019.02.06 |
[RSpec] 레일즈 테스트 코드 작성(작성중) (0) | 2019.01.24 |
인터프리터 언어와 컴파일 언어의 차이 (0) | 2019.01.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 개발자 회고
- Use case
- pop_back
- github
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 내년은 빡세게!!
- 2023년
- 월부닷컴
- 파라메터
- 항해플러스백엔드
- 폭포수
- front
- 항해솔직후기
- docker
- resize
- 인셉션
- 도커
- 재테크공부
- 항해플러스후기
- 깃허브
- push_back
- 부동산공부
- Spring boot
- 유즈케이스
- 열반스쿨기초반
- GIT
- 월급쟁이부자들
- Inception
- 관계대수
- 깃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함