코드라이언 3주차 루비 배우기
루비만이 가지는 최대 강점이 있다.
루비의 최대 강점을 꼽으라면 그 형태가 간결하고 자연스럽다는 것이다.
1995년에 루비가 처음 공개된 이후로, 루비를 사용하는 인구는 전 세계적으로 계속 증가하고 있다.
루비의 또다른 장점으로 객체 지향(object-oriented)적인 속성을 강하게 보여준다는 것이다.
루비에서 다루어지는 데이터형(data type)은 크게 3가지로 분류할 수 있다.
루비에서 특정한 값, 혹은 변수에 대입된 값을 화면에 출력하는 방법에는 두 가지가 있다.
먼저
한편
만약 문자열 안에 다른 변수(문자열, 숫자, 불리언 등)를 포함시켜 출력하고 싶다면,
파일을 실행한 사용자에게 원하는 값을 입력하도록 할 때
수집한 값을 정수(integer) 대신 소수점 아래 자리까지 표시되는 수(floating number; float)로 변환하고 싶은 경우,
프로그래밍 언어에서 핵심적으로 사용되는 것 중 하나가 반복문이다.
루비의 대표적인 반복문으로
루비의 또다른 반복문으로
프로그래밍 과정에서 이렇게 반복적인 작업을 효과적으로 줄여 줄 수 있는 것이 바로 메서드(method)이다.
메서드의 개념은 수학에서의 함수와 매우 유사하다. 수학에서 미리 정의된 함수에 어떤 입력값을 넣으면 새로운 출력값을 얻을 수 있는 것처럼, 루비에서 메서드를 미리 정의해 놓은 뒤 단순히 메서드의 이름과 입력값을 넣으면 위와 같은 계산을 빠르고 쉽게 반복적으로 수행할 수 있다. 다음과 같이 하면 된다.
인자는 하나일 수도 있고, 여러 개일 수도 있다. 또, 변수의 이름을 마음대로 정할 수 있듯이 인자의 이름도 마음대로 정할 수 있다.
메서드를 정의할 때
여러 개의 데이터를 그룹지어 하나의 묶음으로 구성할 수 있는데, 이를 배열(array)이라고 한다.
배열에 새로운 성분을 추가하고자 할 때는 2행의
<<
*루비에서는 배열의 성분을 불러올 때 성분 번호에 음의 정수가 들어갈 수 있다. 배열의 가장 마지막 성분의 번호가 -1이고, 마지막에서 두 번째, 세 번째, 네 번째 순으로 각각 -2,-3,-4,(…)의 성분 번호가 붙는다.
작은 따옴표(
루비에서 여러 개의 데이터를 그룹지어 하나의 묶음으로 구성하는 또다른 형태로 해쉬(hash)가 있다.
앞서 설명한 배열에는 단순히 성분이 되는 데이터만 대입되었다면, 해쉬에는 성분의 이름에 해당하는 ‘키(key)’와 그 키에 대응하는 데이터 값(value)이 동시에 대입된다는 점에서 차이가 있다.
루비의 최대 강점을 꼽으라면 그 형태가 간결하고 자연스럽다는 것이다.
1995년에 루비가 처음 공개된 이후로, 루비를 사용하는 인구는 전 세계적으로 계속 증가하고 있다.
루비의 또다른 장점으로 객체 지향(object-oriented)적인 속성을 강하게 보여준다는 것이다.
루비에서 다루어지는 데이터형(data type)은 크게 3가지로 분류할 수 있다.
- 숫자(number): 0~9 사이 아라비아 숫자들의 조합을 입력하면 숫자로 인식한다. 정수(integer), 실수(float) 등으로 세분화할 수 있다.
- 문자열(string): 숫자 혹은 문자들을 작은 따옴표(
'
) 혹은 큰 따옴표("
)로 묶어 입력하면 문자열로 인식한다. - 불리언(boolean): 비교 연산 혹은 논리 연산에 사용되는 기본 단위로서
true
와false
중 하나의 값만을 가진다.
루비에서 특정한 값, 혹은 변수에 대입된 값을 화면에 출력하는 방법에는 두 가지가 있다.
먼저
print
의 경우, 특정한 값을 출력한 후 줄넘김을 하지 않는다.한편
puts
의 경우, 특졍한 값을 출력한 후 자동으로 줄넘김을 한다.만약 문자열 안에 다른 변수(문자열, 숫자, 불리언 등)를 포함시켜 출력하고 싶다면,
#{ }
를 이용하면 된다.
* puts
와 print
는 앞으로 루비 프로그램을 작성하면서 꽤 자주 사용하게 될 것이나, 이후에 레일스로 넘어가면 거의 사용되지 않는다. 그러나 #{ }
의 경우, 루비에서보다도 이후에 레일스로 넘어가면 더 많이 쓰일 것이니 잘 기억해두도록 하자.파일을 실행한 사용자에게 원하는 값을 입력하도록 할 때
gets
를 사용한다.gets
뒤에 붙는 .chomp
는, 사용자가 값을 입력한 후 엔터를 입력할 때, 이 ‘엔터’에 해당하는 부분을 제거하는 기능을 한다. .chomp
를 포함시켜주지 않으면 input
변수를 출력할 때 의도치 않은 엔터가 같이 출력되어 원하지 않는 결과가 나올 가능성이 있다. 그러므로 gets
뒤에는 습관적으로 .chomp
를 붙여 주는 것이 좋다.
.to_i
는 앞서 gets.chomp
로 수집한 값을 정수(integer)로 변환해주는 기능을 수행한다input = gets.chomp.to_i
수집한 값을 정수(integer) 대신 소수점 아래 자리까지 표시되는 수(floating number; float)로 변환하고 싶은 경우,
.to_i
대신 .to_f
를 사용하면 된다.0.upto(3) do |i|
puts "Grrrr #{i}"
end
.to_i
와 반대되는 기능을 하는 것으로 .to_s
가 있는데, 이는 숫자를 문자열(string)로 변환해주는 기능을 수행한다. 프로그래밍 언어에서 핵심적으로 사용되는 것 중 하나가 반복문이다.
루비의 대표적인 반복문으로
upto
, downto
가 있다. upto
혹은 downto
를 사용할 때는 맨 먼저 매 실행 횟수마다 값이 변화하는 변수를 하나 지정하면서 시작한다. 그 바로 하단에 이 변수의 값이 점차적으로 증가하거나 혹은 감소하는 동안 반복 시행될 코드를 입력하는 형태이다.루비의 또다른 반복문으로
while
이 있다. upto
, downto
와 다르게 while
문에서는 매 실행 횟수마다 값이 변화하는 변수의 조건을 명시적으로 입력할 수 있도록 되어 있다.프로그래밍 과정에서 이렇게 반복적인 작업을 효과적으로 줄여 줄 수 있는 것이 바로 메서드(method)이다.
메서드의 개념은 수학에서의 함수와 매우 유사하다. 수학에서 미리 정의된 함수에 어떤 입력값을 넣으면 새로운 출력값을 얻을 수 있는 것처럼, 루비에서 메서드를 미리 정의해 놓은 뒤 단순히 메서드의 이름과 입력값을 넣으면 위와 같은 계산을 빠르고 쉽게 반복적으로 수행할 수 있다. 다음과 같이 하면 된다.
def sum(a,b)
sum = 0
a.upto(b) do |x|
sum = sum + x
end
puts sum
end
sum(1,10)
sum(11,20)
sum(21,30)
인자는 하나일 수도 있고, 여러 개일 수도 있다. 또, 변수의 이름을 마음대로 정할 수 있듯이 인자의 이름도 마음대로 정할 수 있다.
메서드를 정의할 때
puts
대신 return
을 이용하면 연산 결과를 화면에 출력하지 않고 다른 변수에 저장할 수 있다.
value = subtract(8,3)
를 실행하는 과정에서 화면에 5가 표시되나, value
변수에는 아무런 값도 저장되지 않는다. 이에 따라 puts value
로 value
변수에 저장된 값을 출력하려고 해도, value
에는 아무런 값이 저장되어 있지 않기 때문에 화면에는 공백만 표시된다.여러 개의 데이터를 그룹지어 하나의 묶음으로 구성할 수 있는데, 이를 배열(array)이라고 한다.
배열에 새로운 성분을 추가하고자 할 때는 2행의
lion_name << "Charles"
와 같이 <<
+ (추가할 성분 데이터)
를 입력한다*루비에서는 배열의 성분을 불러올 때 성분 번호에 음의 정수가 들어갈 수 있다. 배열의 가장 마지막 성분의 번호가 -1이고, 마지막에서 두 번째, 세 번째, 네 번째 순으로 각각 -2,-3,-4,(…)의 성분 번호가 붙는다.
.size
배열의 크기를 출력해 주는 메서드이다.
.reverse
배열 내 데이터의 순서를 뒤집어 주는 메서드이다.
.sort
배열 내 데이터의 순서를 오름차순으로 정렬해 주는 메서드이다.
.uniq
배열 내에 서로 중복되는 데이터가 존재하는 경우, 이들을 제거하고 서로 중복되지 않는 값들로만 재구성해 주는 메서드이다.
.each
배열에 대하여 유용하게 사용되는 반복문으로
.each
가 있다. .each
는 배열 내의 각 데이터 성분에 대하여 동일한 작업을 반복적으로 수행할 때 사용하는 메서드이다.things = ["rabbit","mouse","snake","lizard"]
things.each do |thing|
puts "I want to eat some " + thing
end
‘
things
라는 배열의 각 성분을 thing
이라고 할 때, 각각의 thing
에 대하여 다음의 코드를 실행하라’는 의미이다.작은 따옴표(
'
) 혹은 %q[]
로 묶어 입력한 문자열의 경우, #{}
를 사용하여 다른 문자열을 삽입하는 것이 불가능한 것을 확인할 수 있다.
위의 irb에서 세 결과는 모두 동일하다. 성분이 모두 문자열인 배열에 한해서,
%w[]
혹은 %W[]
로 묶어 위와 같이 입력해도 동일한 배열을 만들 수 있다. (다만, 엄밀히 구분하자면 %w[]
의 경우 각 성분들을 작은 따옴표('
)로, %W[]
의 경우 각 성분들을 큰 따옴표("
)로 묶어 입력한 결과가 배열에 저장된다.)
.split('')
을 적용하면 문자열 내의 문자 하나하나를 성분으로 하는 배열을 만들 수 있다. .join
을 적용하면 배열 내의 성분들을 모두 모아 하나의 문자열로 합칠 수 있다.루비에서 여러 개의 데이터를 그룹지어 하나의 묶음으로 구성하는 또다른 형태로 해쉬(hash)가 있다.
앞서 설명한 배열에는 단순히 성분이 되는 데이터만 대입되었다면, 해쉬에는 성분의 이름에 해당하는 ‘키(key)’와 그 키에 대응하는 데이터 값(value)이 동시에 대입된다는 점에서 차이가 있다.
이러한 배열과 해쉬의 차이는 성분을 불러오는 과정에서 확연하게 드러난다. 배열의 경우 성분의 번호를 입력해야만 원하는 데이터 값을 불러올 수 있다는 번거로움이 있는 반면, 해쉬의 경우 처음에 설정했던 성분의 키를 입력하기만 하면 원하는 데이터 값을 쉽게 불러올 수 있다. (다시 말해, 해쉬 내 성분의 순서를 알 필요가 전혀 없다.)
처음에 빈 해쉬를 먼저 만든 뒤 여기에 (키,데이터 값)을 하나하나 성분으로 추가하는 형태로 해쉬를 완성해 나갈 수도 있다.
lion_resume = Hash.new
댓글
댓글 쓰기