본문 바로가기

Back-End/Ruby

[Ruby] Codecademy - 1. Ruby 입문

1. 개요 & 미리보기

루비는 강력하고 유연한 프로그래밍 언어로 웹/인터넷 개발, 텍스트 프로세싱, 게임 개발, 그리고 유명한 웹 프레임워크 Ruby on Rails의 일부 등 여러 곳에 사용되고 있습니다. 루비는 다음과 같은 특징을 가지고 있습니다.

• 고급 언어(High-level language) 이는 루비가 일상 생활에서 사용하는 영어와 비슷하여 읽고 쓰기 매우 편하다는 의미입니다.

• 인터프리터 언어(Interpreted language) 이는 루비를 작성하고 실행하는데 컴파일러(compiler)가 필요하지 않다는 뜻입니다. 여러분은 여기, 코드카데미에서 코드를 작성하거나, 심지어 여러분의 컴퓨터 상에서도 작성할 수 있습니다. (많은 것들이 루비 내장 인터프리터에 포함되어 있습니다. 수업의 뒷부분에서 이에 대해 알아보도록 하겠습니다.)

• 객체 지향(Object-oriented) 이는 프로그램을 실행하고 작성하기 위해 사용자들이 객체(objects)라고 불리는 것을 이용하여 자료 구조를 조작할 수 있다는 의미입니다. 객체에 대해서는 이후 더 자세히 다루도록 하겠습니다만, 지금으로썬 루비 안의 모든 것은 객체(objects)라고만 알아두시기 바랍니다.

• 편리함 루비는 1995년, 마츠모토 유키히로(Yukihiro Matsumoto, 주로 "마츠(Mats)"라고 불림)에 의해 디자인되었습니다. 마츠는 컴퓨터보다도 사람의 요구를 더욱 강조하는 프로그래밍 언어를 디자인하고자 했으며, 이런 이유로 루비는 사용하기 편리한 언어가 되었습니다.


2. 자료형(Data Typse): 숫자, 문자열(strings), 불린(booleans)

루비에서, 정보(또는 데이터)는 다른 형태로 입력될 수 있습니다. 루비에는 세 가지의 자료형(data types)이 있으며, 이들은 각각: 숫자(numbers)불린(booleans)(오직 true와 false, 두 값만 가짐), 그리고 문자열(strings)(단어나 문장으로 이루어짐) 입니다.

컴퓨터 프로그램은 빠르게 데이터를 분석하거나 다루기 위해 존재합니다. 이런 이유로, 프로그램 안에서 사용할 수 있는 여러 자료형들을 이해하는 것이 중요합니다.

기억하세요: 불린값에 절대 따옴표(' 또는 ")를 표시하지 마세요. 그렇지 않으면 루비는 이를 참과 거짓을 나타내는 값이 아니라, 문자열(단어 또는 문장)로 인식할 겁니다. 또한 루비는 대소문자를 구별한다는 것도 주의하세요. (즉, a와 A는 서로 다른 글자로 인식합니다.)


3. 변수(Variables)

컴퓨터의 가장 기본적인 개념 중 하나는 바로 변수(variable)입니다. 변수란, 어떤 값을 담는 일종의 단어나 이름이라고 생각하시면 됩니다. 예를 들어 지난 과제로부터 숫자값 25가 필요하지만, 지금 당장 사용할 것은 아니라고 합시다. 그럼 다음과 같이 my_num이라 불리는 변수에 25를 지정하여 해당 값을 보관해 두었다가 필요할 때 사용할 수 있도록 만들 수 있습니다:

my_num = 25

루비에서 변수 선언은 쉽습니다: 단지 my_num 처럼 이름을 쓰고, 그 뒤에 등호 =를 쓴 다음 값을 지정하기만 하면 됩니다! 만약 변수 안의 값을 바꿔야 한다면, 걱정하지 마세요: 다시 해당 변수의 이름을 쓰고, 등호를 쓴 다음 새로운 값을 적어넣기만 하면 됩니다.


4. 수학 연산

루비의 능력은 my_num = 100과 같이 데이터를 할당하는 간단한 작업에만 단지 국한되지 않습니다. 여러분이 학교에서 배웠던 모든 수학 연산 또한 루비를 통해 할 수 있습니다.

우리가 살펴볼 여섯 가지 수리 연산자(arithmetic operators)는 다음과 같습니다:

덧셈 연산자. Addition (+)
뺄셈 연산자. Substraction (-)
곱셈 연산자. Multiplication (*)
나눗셈 연산자. Division (/)
거듭제곱 연산자. Exponentiation (**)
모듈로 연산자. Modulo (%)

아마 거듭제곱 연산자와 모듈로 연산자는 생소하게 여겨질 겁니다. 거듭제곱 연산자는 어떤 숫자(밑)를 또 다른 숫자(지수) 만큼 거듭 곱하도록 만듭니다. 예를 들어, 2**3은 "2 * 2* 2" (2를 세 번 거듭하여 곱셈)을 뜻하기 때문에, 결과로 18을 반환합니다. 3**2은 3 * 3이므로 9를 반환, 이런 식이죠.

모듈로 연산은 나눗셈에서의 나머지를 반환합니다. 예를 들어 25 % 7라고 하면, 25를 7로 나누면 나머지로 4가 남기 때문에, 결과로 4를 반환합니다.


5. 'put' 그리고 'print'

print 명령어는 무엇이든 입력한 값을 화면에 출력하는 기능을 합니다. 이와 조금 달리, puts (put string이라는 뜻) 명령어는 입력한 값을 화면에 출력하되, 입력값 뒤에 새로운 (비어있는) 줄을 추가합니다. 다음과 같이 이들을 사용할 수 있습니다:

puts "What's up?"
print "Oxnard Montalvo"

작성하는데 소괄호('()')나 세미콜론(;)은 필요 없습니다!


6. 루비 안의 모든 것은 객체(Object) 입니다

루비 안의 모든 것은 객체(이후 좀 더 자세히 다루겠습니다)이기 때문에, 루비 안의 모든 것은 메소드(methods)라 불리는 특정한 내장 능력을 가지고 있습니다. 메소드란, 일종의 객체가 가진 "기술(skill)"이라고 생각하시면 됩니다. 이를테면, 문자열(단어, 또는 문장)은 문자열의 길이를 알려주거나, 문자열을 거꾸로 뒤집는 것 외에도 여러 가지 다양한 내장 메소드를 가지고 있습니다.

또한 앞서 튜토리얼에서 인터프리터(interpreter)에 관해 좀 더 말씀드리겠다고 약속했었는데요, 인터프리터는 여러분이 작성한 코드를 받아서 실행하는 프로그램입니다. 여러분이 에디터(editor) 안에 코드를 작성하면, 인터프리터는 해당 코드를 읽은 다음, 코드의 실행 결과를 콘솔(console)(오른 편 상단의 작은 영역)을 통해 여러분에게 보여줄 것입니다.


7. '.length' 메소드(Method)

메소드(method)는 구두점(.)을 통해 호출됩니다. 만약 "I love espresso"라는 문자열이 있고, 여기에 .length 메소드를 사용하면, 루비는 결과로 해당 문자열의 길이(length. 즉, 해당 문자열 안에 들어있는 문자-글자, 숫자, 공백, 기호 등-의 갯수)를 반환할 겁니다. 다음을 확인해 보세요:

"I love espresso".length
# ==> 15

(# 기호로 시작하는 작은 줄은 작성한 내용에 포함된 부분이 아닙니다. 여기서는 단지 메소드 사용 결과를 표시하려고 작성해 두었습니다. 이에 관해선 다음 과정에서 다뤄보겠습니다!)

입력값의 길이를 재는 것은 예를들어 여러분이 신용 카드 결제를 받는 웹사이트 등을 만들 때 유용하게 사용될 수 있습니다. 신용 카드 숫자가 유효한지를 루비가 체크할 수 있도록 만들 수 있기 때문입니다.


8. '.reverse' 메소드(Method)

.reverse 메소드 역시 .length 메소드와 같은 방법으로 호출되지만, 문자열의 길이를 알려주는 length와 달리, 이 메소드는 입력한 문자열을 거꾸로하여 반환합니다. 예를 들어,

"Eric".reverse

위의 코드는 아래와 같은 결과를 반환합니다.

"cirE"

입력값을 뒤집는 것은 값이 내림차순으로 되어있는 리스트(list)를 오름차순으로 정렬할 때 유용하게 사용할 수 있습니다. (값의 정렬에 관해서는 이후 수업에서 다루도록 하겠습니다.)


9. '.upcase' & '.downcase' 메소드(Method)

메소드 한 개만 더(아, 두 개군요) 배워봅시다. 여러분이 예상하셨다 시피, .upcase 그리고 .downcase 메소드는 각각 문자열을 모두 대문자, 또는 모두 소문자로 변환시킵니다.


10. 한 줄 주석(Single-Line Comments)

이전 과제에서 몇 번 # 기호를 사용한 것을 본 적이 있을 겁니다. 루비에서 #기호는 주석(comments)을 의미합니다. 주석은 루비에서 코드로 실행되지 않는 텍스트를 뜻합니다: 이는 오직 사람들만 읽을 수 있습니다. 좋은 주석을 작성하는 것은 코드를 읽는 다른 사람들을 위해 코드를 명료하게 만들 뿐 아니라, 오래전에 여러분이 작성한 코드를 다시 읽을 때 기억을 상기하는 걸 돕기도 합니다.

# 기호는 주석처리하고 싶은 텍스트 앞에 쓰여야 하며, 기호 뒤로 쓰인 모든 텍스트는 한 줄 이내에 있기만 하면 모두 다 주석으로 간주됩니다. (여러줄 주석은 어떻게 작성하는지는 곧 알려드리겠습니다.) 아래의 예제를 살펴보세요:

# 이 줄은 전부 주석입니다!
"Eric".length # 여기부터 다시 주석이죠!

위의 예제에서 루비가 실행하는 코드 다음부터는 주석이기 때문에, 결과로 4를 반환할 겁니다.


11. 여러 줄 주석(Multi-Line Comments)

매 줄마다 처음 시작을 # 기호로 작성하셔도 여러 줄을 주석처리할 수 있긴 하지만, 좀 더 쉬운 방법이 있습니다. 처음 시작을 =begin으로 시작하여 끝을 =end로 끝내면, 이 두 표현 사이에 있는 모든 것은 주석으로 간주됩니다. 다음의 예제를 살펴보세요:

=begin
이 부분은 전부 주석입니다!
매 줄마다 # 기호를 사용할 필요가 없죠.
=end

begin또는 end 단어와 = 기호 사이에 어떤 공백도 넣지 마세요. 수학 공식을 계산할 때에는 상관없지만 (2 + 5는 2+5와 똑같습니다), 이 경우에는 루비가 혼동할 수도 있기 때문입니다. 위의 예제에서처럼 =begin과 =end 모두 해당 줄에는 해당 표현만 위치해야 합니다.


12. 이름짓기에 관한 규칙

앞으로 코스를 진행해 나감에 따라 많은 수와 다양한 종류의 변수들을 만나게 되겠지만, 지금 당장은 일반적은 지역 변수(local variables)들만 염두에 두도록 합시다. 관례에 따르면 이 변수들은 소문자로 이름이 시작되어야 하며, 밑줄 표시로 단어들을 구분해야 합니다: counter 또는 masterful_method와 같이 말이죠. 물론 변수의 시작을 대문자로 하거나, 다른 기호($라든가, @)를 사용한다고 루비가 막는 것은 아니지만, 관례에 의하면 이들은 전혀 다른 의미를 갖게 되어버립니다. 따라서 루비 사용자들이 정한 규칙을 준수함으로써 혼란을 피하는 것이 최상입니다.


Ruby 실습하기 : https://www.codecademy.com/en/tracks/ruby-ko