Loading deck

3회차

Ruby on Rails 기초

 

 

멋쟁이 사자처럼 인하대학교 5기 운영진 정유택

Ruby on Rails란?

 

루비 온 레일즈(Ruby on Rails)는

루비로 작성된 MVC 패턴을 이용하는 웹 프레임워크이다.

줄여서 레일즈라 불리기도 한다.

 

레일즈는 모델, 뷰, 컨트롤러의 템플릿 생성 및 테스트 등 자동화하는 툴,

테스트를 위한 웹서버 등을 포함하고 있어 웹 어플리케이션을 빠르게 개발 할 수 있다.

Rails의 특징

1. MVC 모델이 거의 완벽히 구현되어 있다.

  추가적인 작업 없이 파일명만 맞추면 MVC모델이 구현됨.

  => 구조화 하는 작업 최소화

 

2. 외부 라이브러리를 추가하는 것이 매우 간단하다.

  Gem을 통해 외부 라이브러리를 쉽게 불러올 수 있다

 

3. 이 외에도 귀찮은 작업을 최소화해준다.

  라우트 지정, M-V-C 연결, db생성 등의 과정을 쉽게 처리해준다

  (SQL문을 몰라도 생성가능!)

 

4. Ruby언어를 사용함

  배우기 쉬운 언어 Ruby를 기반으로

  배우는 부담이 덜하고, 보다 쉽게 개발이 가능

 

Ruby란?

루비(Ruby)는 마츠모토 유키히로가 개발한

객체 지향 스크립트 프로그래밍 언어이다.

루비는 순수 객체 지향 언어라, 정수나 문자열 등을 포함한

데이터 형식 등 모든 것이 객체이다.

객체 지향이란?

객체(object) : 우리 주변의 모든 '것'. 데이터와 동작을 모두 포함하는 개념.
지향 :  어떤 목표로 뜻이 쏠리어 향함.

객체 지향 3요소

1.캡슐화

 

2.상속

 

3.다형성

 

1.캡슐화

관련된 것 끼리 모아서 다른 곳에서 안보이게끔 하는 것.​ 이를 객체지향 언어에서는 클래스를 통해서 구현한다.

ex) '민균이가 ATM 기기에서 3만원을 출금했다.' ATM 기기는 입출금, 계좌이체 등을 포함한 '은행업무'에 관련된 기능들을 모아놓은 기기이다. 그리고 예시에서 우리는 3만원이 세부적으로 어떤 절차를 거쳐서 출금이 되는지를 몰라도 된다. 그저 ATM 기기에서 돈을 출금할 수 있는 기능이 있다는 것만을 알면 된다.

2.상속

부모 클래스의 데이터와 동작을 자식 클래스가 물려받아서 그대로 사용할 수 있는 것.

ex) 1개의 동물이라는 부모 클래스와 거북이,토끼,사자 3개의 자식 클래스가 있다고 가정하자. 동물이라는 부모 클래스에 이름이라는 변수와 달리다 라는 동작이 있다. 이를 거북이와 토끼, 사자 클래스에서 상속받으면 거북이와 토끼, 사자 클래스에서 이름이라는 변수와 달리다 라는 동작을 사용할 수 있게된다. 이렇게 하면 거북이 토끼 사자 세 개의 자식 클래스에서 일일이 이름이라는 변수와 달리다 라는 동작을 만들어 주지 않아도 되며 변경사항이 생기면 동물 클래스에서 한번만 변경하면 되므로 한꺼번에 유지보수 할 수 있다.

3.다형성

같은 이름을 가지고도 여러 형태로 나타내어 질 수 있는 성질. 다형성을 구현하는 방법으로는 오버라이딩와 오버로딩이 있다.
ex) 오버라이딩(수직관계) : 동물이라는 부모 클래스의 달리다 라는 동작은 ['호다닥' 달린다. ] 이라면, 자식 클래스인 거북이 클래스에서는 달리다 라는 동작을 ['느릿느릿' 달린다.] 로 재정의 할 수 있다. 

오버로딩(수평관계) : 덧셈(+) 연산이 가장 대표적인 오버로딩이다. 

"7" + "2" = "72"

7 + 2 = 9

똑같은 덧셈(+) 연산이지만 문자열을 더할 때와 숫자를 더할 때의 결과가 다르다.

객체지향 개발의 5대 원리(SOLID)

중에서 S에 해당하는 단일 책임의 원칙(Single responsibility principle) 만 다룰겁니다.
 

이는 동일한 이유로 변경되는 것들은 함께 모으고, 서로 다른 이유로 변경되는 것들은 분리시킨다. 라는 기본원칙을 가지고 설계를 해야한다는 것 입니다.

문장 뜻만 딱 봐도 나중에 유지보수할 때 수월하게 하기 위함이 느껴지시죠?!

그럼 루비의 기초 문법을 알아보자

 

irb(interactive ruby)를 통해 실습!

 

irb란?

루비에서 지원하는 대화형 루비쉘

쉽게말해 명령단위로 결과가 나옴 exit으로 종료

기초 문법

 

  • 출력문
    puts 개행문자를 문자열의 끝 부분에 더해서 출력
    print 개행문자 없이 문자열만을 출력
  • 문자열 "" 안에 변수를 넣으려면 #{} 안에 변수를 넣으면 됨
  • 주석은 #을 사용해 입력
  • gets.chomp로 사용자의 입력을 받을 수 있음

method(메소드) 정의

레일즈에서는 컨트롤러에서 메소드 정의 후 뷰에서 호출

 

  • def 키워드 필요
  • def  다음에 메소드 이름을 쓰고 그 다음에는 괄호로 둘러싸인
    메소드 형식인수를 쓴다
  • 메소드 끝 부분에 키워드 end를 써준다.
def hello(name)
    puts "안녕하세요 #{name}"
end

hello(유택) #=> 안녕하세요 유택

배열(Array)

배열이란 여러개의 데이터를 하나의 변수에 담아 관리하기 위해 사용

 

 

 

 

index는 배열의 식별자로

배열의 데이터를 호출할때 사용되며

0부터 순차적으로 부여

해쉬(Hash)

해쉬란 배열에서 index 대신 문자열로 데이터를 구분하고 싶을 때 사용

 

 

 

 

위의 예시에서 "apple"은 배열의 index에 해당하는 key값, "fruit"은 실질적으로 얻는 값,  value라 부름

식별자가 있는 데이터는 배열대신 해쉬를 사용하는것이 좋음!

선언 - rails = [ "ruby", 1231, true ]
rails[0] => "ruby"
rails[1] => 1231
rails[2] => true
rails = { "apple" => "fruit", 1 => "number" }
rails["apple"] => "fruit"
rails[1] => "number"

배열 제어

rails = Array.new(3, "ruby") => ["ruby", "ruby", "ruby"]
반복생성시 사용

rails = Array(1..3) => [1, 2, 3 ]
rails = Array(1...3) => [1, 2 ]

rails = [1, 2, 3]
rails.length => 3
rails.size => 3

rails.count(1) => 1
rails.count(2) => 1
rails.count(3) => 1

배열 조작

추가

 

 

 

 

제거

 

정렬

 

 

이때 메소드 뒤에 !를 붙이면 원래의 배열에 새로운 값을 덮어쓴다는 의미(sort!)

 

추출

 

 

=> 랜덤으로 3개의 요소를 추출

rails = [1, 2, 3]
rails.push(6) => rails = [1, 2, 3, 6]
rails << 6 => rails = [1, 2, 3, 6]
rails = [1, 2, 3, 4, 5]
rails.shift(2) => [3, 4, 5]
rails.pop(2) => [1, 2, 3]
rails = [1, 6, 3, 7]
rails.sort => [1, 3, 6, 7]
rails = [1, 2, 3, 4]
rails.sample(3)

반복자(일종의 method)

times

# 원하는 만큼 반복시키자.
3.times do
    puts "Hack Your Life"
end
#=> "Hack Your Life"
#=> "Hack Your Life"
#=> "Hack Your Life"


# Block 과의 조합 (| | 안에는 아무거나 써도 상관없는 변수 )
5.times do |i|
    print i        # times 메서드는 0부터 count.
end
#=> 01234

each

# 배열
arr = ['a', 'b', 'c', 'd', 'e']

arr.each do |item|
    print item
end
#=>abcde

# 해쉬
hash = { 'a' => 'A', 'b' => 'B', 'c' => 'C'}

hash.each do |key, value|
    puts "Upper case of #{key} is #{value}" 
end
#=>Upper case of a is A
#=>Upper case of b is B
#=>Upper case of c is C

데이터

.to_i - 대상을 정수로 변환(내림)

.to_f - 대상을 실수로 변환

.to_s - 대상을 문자열로 변환

.to_a - 대상을 배열로 변환

 

.class로 데이터 형식 확인 가능

.include?() 괄호 안에 내용을 담아 존재 여부 확인

조건문(if)

neo_birth = { year: 1991, month: 7, day: 12 }
tak_birth = { year: 1991, month: 2, day: 2 }

if (neo_birth[:year] < tak_birth[:year])         # 만약 neo 의 생일[연도] 가 더 작으면
    puts "neo is older than tak."
elsif (neo_birth[:year] > tak_birth[:year])      # 만약 neo 의 생일[연도] 가 더 크면
    puts "tak is older than neo."
else                                             # 그 외에 (생일[연도]가 같으면)
    if (neo_birth[:month] < 3 || tak_birth[:month] < 3)  # 둘 중에 한명이라도 생일[월] 이 4 보다 작으면   
        puts"someone is breaking the JOKBO."
    else                                                 # 연도가 같고 둘 다 빠른 년생이 아니면
        puts "the JOKBO is safe and they are DONG-GAB."
    end
end

조건문(case)

# 사자 구별 프로그램.
age = 27           # age 에 27 을 저장

case age               # age 가..
when 0..7              # 0이상 7이하 라면 
  puts "아기 사자"         # "아기 사자" 를 출력한다.
when 8..19             # 8이상 19이하 라면
  puts "급식 사자"         # "급식 사자" 를 출력한다.
when 20..99            # 20이상 99이하 라면 
  puts "멋쟁이 사자"      #"멋쟁이 사자" 를 출력한다.
else 
  puts "장수 사자"    # 그 이외에는 "장수 사자" 를 출력한다.
end 
# => "멋쟁이 사자"

오늘의 실습

로또 만들기

Q&A