[RoR 학습] 4장 루비언어 1/2

개인적으로 “레일스와 함께하는 애자일 웹 개발(개정 4판)” 이북으로 틈틈히 루비온레일스를 학습하고 있는 중이다. 이 포스팅은 학습한 내용을 복습,정리하는 차원에서 쓰고 있다. 이전 포스팅은 아래를 참고하면 된다.

사실 지금 진도는 6장을 진행 중이지만 이번주는 연구실 일이 바빠 포스팅할 시간이 없었다. 일단 4장의 제목은 “루비소개”이다. 레일스 프레임워크가 루비 언어를 기반으로 하기 때문에 루비 언어에 대한 설명이 4장의 주를 이룬다. 물론 프로그래밍 언어 공부를 한 번이라도 해 본 분들은 문법이나 예약어 등의 차이를 제외하면 객체지향 언어의 특징이 유사하기 때문에 그리 어렵지 않게 읽고 넘어갈 수 있다.
USA ray ban sunglasses
4장의 내용은 “Programming Ruby”라는 소위 곡괭이 책 1이라 불리우는 데서 대부분 차용했다. 따라서 루비 언어를 제대로 학습하고 싶은 사람은 곡괭이 책을 볼 것을 저자가 제안한다. 바로 곡괭이 책을 찾아 봤다. 그러나… 라이브러리에 대한 상세한 설명이 포함된 것을 감안해도 곡괭이 책은 936페이지나 되기 때문에 단기일에 학습하기에는 분량이 너무 많다. ㅠ 4장의 내용만 이해한 후 나중에 필요에 따라 곡괭이 책은 쿡북형태로 참고하기로 결정했다 2.
oakley sunglasses cheap
간단하게 나마 루비언어의 특성을 살펴보자면 잠깐 언급한대로 루비도 객체지향 언어이다. 따라서 클래스를 정의할 수 있고 객체와 메서드를 통해서 연산한다. 변수나 메서드 등의 이름을 작성할 때 사용하는 관용적인 방법은 자바와 다르다. 자바는 소위 낙타허리와 같이 중간에 나오는 단어의 첫 글자는 대문자를 쓰는 표기법을 취하지만 루비에서는 소문자와 ‘_’를 통해서 사용한다. 변수의 타입은 명시적으로 선언할 필요가 없다. 배열과 해시뿐 아니라 정규표현식까지 루비도 지원한다.
air max 95
루비 언어가 좋은 점 중 하나는 괄호를 사용하지 않는다는 점이다. 이는 파이썬도 동일한데 루비는 들여쓰기와 “def, end”를 통해서 클래스나 메서드의 영역을 구분한다. 반복문과 같은 블록들도 동일하다. 따라서 메서드 정의는 루비에서 다음과 같이 작성된다.

루비에서 볼 수 있는 독특한 문법으로 블록이 있다. 코드의 일부를 하나로 묶는 것을 말하며 한 줄일 경우는 “{}”로 표현하고 여러 줄이면 do/end를 사용한다. 함수형 언어의 람다와 비슷한 듯 하다. 보통 yield 명령어와 함께 많이 쓰인다고 하는데 갑자기 왠 yield? 책에선 제대로 설명이 나와 있지 않아 yield가 무엇인지 곡괭이 책을 참조해야 했다. 일단 예제를 먼저 한번 보자.

결과는 예상하듯이 다음과 같이 나온다.
oakley military sunglasses
블록 실행화면

즉 yield는 메서드 뒤에 매개변수로 붙은 블록코드를 실행시키는 데 사용된다. 또 다른 예제로 &표시로 블록을 매개변수로 받아 메서드 안에서 실행시키는 것이다.
설명으로만 읽어서는 정확하게 용례가 와닿지는 않지만 다음 책의 예제를 보면 대략의 쓰임새는 알 수 있다.

마지막으로 블록코드 내에서 “||” 수직바 안에 변수를 넣으면 여기에 값을 전달받는 기능도 있다. 다음의 예제를 보면 쉽게 이해할 수 있다.

첫 번째 줄은 animals라는 배열에 각 문자열을 할당하는 것이다. 두 번째 줄에서 each 메서드에 블록을 넘기는데 여기서 ||수직바 안에 animal이라는 변수를 통해 값을 받아서 화면에 뿌린다. 결과는 예상하는 것처럼 다음과 같이 나오게 된다.
buy ray ban sunglasses
블록 실행화면2

오늘은 루비언어를 간략히 살펴보면서 루비의 특징적인 기능 중 하나인 블록에 대해서 간단히 살펴보았다. 이제 막 루비를 공부하는 시작단계라 블록의 장점이 피부에 와닿지 않지만 블록을 활용하여 코드를 훨씬 더 간결하게 할 수 있다고 하니 차근차근히 공부해 보자.

Notes:

  1. 책의 표지가 곡괭이다. 마치 전산 학부 과정중 Operating Systems 교재의 정석이라 불리우는 공룡책과 같다.
  2. 실제로도 6장을 학습하는데 루비 문법때문에 이해하지 못할 일은 없다.