65
루비는 패셔니스타 문추근 KT Hitel / Web 플랫폼 Lab

[A1]루비는 패셔니스타

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: [A1]루비는 패셔니스타

루비는����������� ������������������  패셔니스타

문추근

KT����������� ������������������  Hitel����������� ������������������  /����������� ������������������  Web����������� ������������������  플랫폼����������� ������������������  Lab

Page 2: [A1]루비는 패셔니스타
Page 3: [A1]루비는 패셔니스타

2006 ~ 20112011

Page 4: [A1]루비는 패셔니스타

Text

Page 5: [A1]루비는 패셔니스타

http://www.flickr.com/photos/dixieroadrash/3429742001

Page 6: [A1]루비는 패셔니스타

루비는����������� ������������������  패셔니스타

1. 루비

1.1. 철학

1.2. 특징

1.3. 영향

2. 레일스

2.1. 특징

2.2. 영향

3. 루비����������� ������������������  파생상품

4. 루비와����������� ������������������  레일스의����������� ������������������  활용

5. 배워야����������� ������������������  하는����������� ������������������  이유

Page 7: [A1]루비는 패셔니스타

Ruby1995 Yukihiro Matsumoto (Matz)

Page 8: [A1]루비는 패셔니스타

More powerful than Perl More object oriented than Python

Page 9: [A1]루비는 패셔니스타

Ruby is designed to make programmers happy

be human-oriented

make programming fun

Page 10: [A1]루비는 패셔니스타

루비의����������� ������������������  특징

Page 11: [A1]루비는 패셔니스타

객체����������� ������������������  지향����������� ������������������  프로그래밍

Page 12: [A1]루비는 패셔니스타

객체

자료 행동

Page 13: [A1]루비는 패셔니스타

객체

행동

Page 14: [A1]루비는 패셔니스타

모두����������� ������������������  다����������� ������������������  객체

Page 15: [A1]루비는 패셔니스타

모두����������� ������������������  다����������� ������������������  객체

-1.23.abs

'Hello'.reverse

true.methods

['c', 'a', 'b'].sort

nil.nil?

Page 16: [A1]루비는 패셔니스타

// JavaScript - Chai.js

foo.should.have.length(3);

expect(foo).to.have.length(3);

// Java

if (foo.equals("hi")) { ... }

if ("hi".equals(foo)) { ... }

모두����������� ������������������  다����������� ������������������  객체

Page 17: [A1]루비는 패셔니스타

# Ruby

[1, 2, 3].max

foo.empty?

// JavaScript

Math.max(1, 2, 3);

!foo

모두����������� ������������������  다����������� ������������������  객체

Page 18: [A1]루비는 패셔니스타

유연함

Page 19: [A1]루비는 패셔니스타

3.days.since Date.yesterday

(1.year + 6.months).ago

'person'.pluralize

=> 'people'

'ILoveYou'.underscore.humanize

=> 'I love you'

class Date

def yesterday

self - 1

end

end

class Integer

def months

    Duration.new self * 30.days

end

end

몽키����������� ������������������  패치

Page 20: [A1]루비는 패셔니스타

class User attr_accessor :email

def initialize(email) @email = email endend

class User def initialize(email) @email = email end

def email @email end def email=(email) @email = email endend

메타����������� ������������������  프로그래밍

Page 21: [A1]루비는 패셔니스타

메타����������� ������������������  프로그래밍

def attr_accessor *args args.each do |arg| self.class_eval "def #{arg};@#{arg};end" self.class_eval "def #{arg}=(val);@#{arg}=val;end" endend

Page 22: [A1]루비는 패셔니스타

블록

Page 23: [A1]루비는 패셔니스타

# Rubynumbers.each do |n| n.do_somethingend

// JavaScriptfor (var i = 0; i < numbers; i++) { var n = numbers[i]; doSomething(n);}

블록

Page 24: [A1]루비는 패셔니스타

(1..10).each do |i|

print i

end

3.times {|i| puts i}

블록

Page 25: [A1]루비는 패셔니스타

Enumerable

all?

any?

chunk

collect

collect_concat

count

cycle

detect

drop

drop_while

each_cons

each_entry

each_slice

each_with_index

each_with_object

entries

find

find_all

find_index

first

flat_map

grep

group_by

include?

inject

map

max

max_by

member?

min

min_by

minmax

minmax_by

none?

one?

partition

reduce

reject

reverse_each

select

slice_before

sort

sort_by

take

take_while

to_a

zip

Page 26: [A1]루비는 패셔니스타

약속

Page 27: [A1]루비는 패셔니스타

약속

puts 'hello'

nil? empty? exist? directory?

[1, 2, 3].sort[1, 2, 3].sort!

$global_variable@instance_variable@@class_variableCONST

Page 28: [A1]루비는 패셔니스타

루비의����������� ������������������  영향

Page 29: [A1]루비는 패셔니스타
Page 30: [A1]루비는 패셔니스타

Ruby on Rails2004 by David Heinemeier Hansson (DHH)

Page 31: [A1]루비는 패셔니스타

/users

Router

Controller

ModelView

index

@users

User.all

SQL Query

Page 32: [A1]루비는 패셔니스타

레일스의����������� ������������������  특징

Page 33: [A1]루비는 패셔니스타

Scaffold

Page 34: [A1]루비는 패셔니스타

Scaffold

• $ rails generate scaffold post title:string content:text

• Database����������� ������������������  Migration

• Model

• Controller

• View

• Route

• CoffeeScript

• SCSS

• Test

Page 36: [A1]루비는 패셔니스타

RESTful

REpresentational����������� ������������������  State����������� ������������������  Transfer

Page 37: [A1]루비는 패셔니스타

RESTful

Method URL Action

GET /posts index

POST /posts create

GET /posts/new new

GET /posts/:id/edit edit

GET /posts/:id show

PUT /posts/:id update

DELETE /posts/:id destroy

Page 38: [A1]루비는 패셔니스타

레일스의����������� ������������������  영향

Page 39: [A1]루비는 패셔니스타
Page 40: [A1]루비는 패셔니스타

• Model

• Controller

• Router

Page 41: [A1]루비는 패셔니스타

루비����������� ������������������  파생상품

Page 42: [A1]루비는 패셔니스타

# hello.rb

require ‘sinatra’

get ‘/’ do ‘Hello world!’

end

$ ruby hello.rb

Page 43: [A1]루비는 패셔니스타
Page 44: [A1]루비는 패셔니스타
Page 45: [A1]루비는 패셔니스타

루비와����������� ������������������  레일스의����������� ������������������  활용

Page 46: [A1]루비는 패셔니스타

루비의����������� ������������������  활용

• Homebrew

• Rake

• Backbone

• Underscore

• Zepto

• Angular

• Jasmine

• Mustache

• Prototype

• BDD

Page 47: [A1]루비는 패셔니스타

레일스

• Wunderkit

• Twitter

• Hulu

• Groupon

• GitHub

• Shopify

• Scribd

• Diaspora

• Code����������� ������������������  School

Page 48: [A1]루비는 패셔니스타

한국에서는����������� ������������������  왕따

Page 49: [A1]루비는 패셔니스타
Page 50: [A1]루비는 패셔니스타
Page 51: [A1]루비는 패셔니스타

http://anime.desktopnexus.com/wallpaper/718281/

등가교환의����������� ������������������  법칙

무언가를����������� ������������������  얻기����������� ������������������  위해서는����������� ������������������  그와����������� ������������������  동등한����������� ������������������  대가가����������� ������������������  필요하다

Page 52: [A1]루비는 패셔니스타

모바일����������� ������������������  시대

• 개발����������� ������������������  속도가����������� ������������������  더����������� ������������������  중요한����������� ������������������  서비스

• MVC����������� ������������������  is����������� ������������������  dead

• 뷰가����������� ������������������  중요하지����������� ������������������  않은����������� ������������������  시대

• API����������� ������������������  중심����������� ������������������  서버

• RESTful

Page 53: [A1]루비는 패셔니스타

배워야����������� ������������������  하는����������� ������������������  이유

Page 54: [A1]루비는 패셔니스타

매년����������� ������������������  새로운����������� ������������������  언어를����������� ������������������  배워라

• 실용주의����������� ������������������  프로그래머����������� ������������������  Tip����������� ������������������  #8

• 지식����������� ������������������  포트폴리오에����������� ������������������  주기적으로����������� ������������������  투자하라.

• 다른����������� ������������������  언어는����������� ������������������  동일한����������� ������������������  문제를����������� ������������������  다르게����������� ������������������  푼다.

Page 55: [A1]루비는 패셔니스타

1����������� ������������������  ~����������� ������������������  10����������� ������������������  가운데����������� ������������������  짝수를����������� ������������������  배열로

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]odds = []

Page 56: [A1]루비는 패셔니스타

C

int numbers[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int result[10];int i = 0;int j = 0;

for (i = 0; i < 10; i++) { int n = numbers[i];

if (n % 2 == 0) { result[j++] = n; }}

Page 57: [A1]루비는 패셔니스타

JavaScript

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];var result = [];var i = 0;var j = 0;

for (i = 0; i < 10; i++) { var n = numbers[i];

if (n % 2 == 0) { result[j++] = n; }}

Page 58: [A1]루비는 패셔니스타

Python

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]result = []

for number in numbers: if n % 2 == 0: result.append(n)

Page 59: [A1]루비는 패셔니스타

Ruby

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]result = []

for number in numbers if n % 2 == 0 result.push(n) endend

Page 60: [A1]루비는 패셔니스타

JavaScript

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// ECMAScript 5, IE9+var result = numbers.filter(function(n) { return n % 2 == 0;});

// jQueryvar result = $.grep(numbers, function(n) { return n % 2 == 0;});

Page 61: [A1]루비는 패셔니스타

Python

[n for n in range(1, 11) if n % 2 == 0]

Page 62: [A1]루비는 패셔니스타

Ruby

(1..10).select {|n| n % 2 == 0}

Page 63: [A1]루비는 패셔니스타

언어의����������� ������������������  한계가����������� ������������������  곧����������� ������������������  자기����������� ������������������  세계의����������� ������������������  한계다

루트비히����������� ������������������  비트겐슈타인

Page 64: [A1]루비는 패셔니스타
Page 65: [A1]루비는 패셔니스타