SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Kookmin University
Graduate School of Busuness IT
e-Government System Development
석사 1학기 안 재열
What is the Ruby?
• meaning reading and writing Ruby is really easy—
• it looks a lot like regular English!High-level
• meaning you don't need a compiler to write and run Ruby.InterpretedInterpreted
• everything in Ruby is an object.Object-oriented
• Marts design a language that emphasized human needs over tho
se of the computer, which is why Ruby is so easy to pick up.Easy to use
What is the Ruby?
Who made the Ruby?
• 마츠모토 유키히로
• 프로그래머
• 마츠모토 유키히로 는 루비를 개발한 프로그래머이다.
일본 오사카 부 태생. 고등학교까지 독학으로 프로그
래밍을 익혔으며, 쓰쿠바 대학교 정보학부를 나와,
• 시마네대학 대학원에서 박사과정을 취득했다. 2006
년 현재, 시마네 현에서 오픈소스 관련 회사인 네트워
크 응용통신 연구소의 특별 연구원으로 재직하고 있
다. 마츠모토는 결혼하여 4명의 아이들이 있다.
• 출생: 1965년 4월 14일 (49세), 일본 오사카 부 오사카 시
• 학력: 쓰쿠바 대학
Why made the Ruby?
• 마츠모토 유키히로 : 프로그램을 짜는 것이
쉬워즈는 것 뿐만 아니라,
• 프로그래머가 즐거워지도록 설계했습니다.
• 저는 많은 프로그래밍 언어를 알지만, 그 어느것에서도 만
족할 수 없었습니다. 제가 기대한 것 보다 보기 흉하거나,
거칠거나, 복잡하거나, 너무 간단했습니다.
• 그래서 스스로 만졸할만한 자신만의 언어를 만들고 싶었습
니다. 자신을 위한 언어라서 어디가 가려운 곳인지 잘 알고
있었습니다. 깜짝놀란 것은 이세상에는 저처럼 느끼는 프로
그래머가 수없이 많다는 것입니다.
• 루비를 개발하면서 프로그래밍을 더 빠르고 ‘쉽게’ 하는데
집중했습니다.
codecademy
• http://www.codecademy.com/learn
Cloud 9 (Saas)
• https://c9.io
• Ubuntu + Rails + Ruby + IDE_Tool +(Git Hub)
Reference
저자: 유키히로마츠모토
Rubyists bible
마틴파울러추천저자: 유키히로마츠모토 마틴파울러추천
유키히로추천
실습위주 뼈대잡기, 훝기….
Intro
Everything is object in Ruby
• (※ 주석은 #으로 시작하고 =>는 명령어를 실행했을때 반환되는 값을 나타냅니다.)
1.class #=>Fixnum
0.0.class #=>Float
True.class #=>TrueClass
False.class #=>FalseClass
Nil.class #=>NilClass
False.class #=>FalseClass
Nil.class #=>NilClass
1.class #=>Fixnum
Method (메소드)
Method in Ruby
• Method form in ruby
def (parameter1, parameter2, parameter3…)
Doing Something
end
• Parentheses are usually optional in Ruby.
• 보통 parameter 혹은 리턴의 대상이 한 개일 때 생략한다.
end
Method in Ruby
• Implicit Return
• Parentheses are usually optional in Ruby.
• 보통 parameter 혹은 리턴의 대상이 한 개일 때 생략한다.
Interpolation 보간법
Interpolation
• Interpolation
• Interpolation allows Ruby code to appear within a string. The result of evaluating t
hat code is inserted into the string:
• "1 + 2 = #{1 + 2}" #=> "1 + 2 = 3"
#{expression}
The end of the sentence
• Usually, Every sentence should be ended by semi-colon in ‘Java’ or ‘C‘
• But in Ruby, Don’t care about it.
불완전한문장(이어짐)
완전한문장(종료)완전한문장(종료)
문장연결
Interpolation
• Interpolation
• Interpolation allows Ruby code to appear within a string. The result of evaluating t
hat code is inserted into the string:
• "1 + 2 = #{1 + 2}" #=> "1 + 2 = 3"
#{expression}
Dynamic Typing
• Ruby is dynamically typed: the type of a variable is generally not inferable until
runtime. So s=5 can follow s=” foo” in the same block of code.
• Because variables do not have types.
Dynamic Typing
• Ruby is dynamically typed: the type of a variable is generally not inferable until
runtime. So s=5 can follow s=” foo” in the same block of code.
• Because variables do not have types.
Dynamic Typing
• Ruby is dynamically typed: the type of a variable is generally not inferable until
runtime. So s=5 can follow s=” foo” in the same block of code.
• Because variables do not have types.
Every Operation is a Method Call
• every operation is a method call, note that even basic math operations
• such as +, *, = = (equality comparison) are ‘syntactic sugar’ for method calls
Every Operation is a Method Call
• every operation is a method call, note that even basic math operations
• such as +, *, = = (equality comparison) are ‘syntactic sugar’ for method calls
• syntactic sugar (사람이 이해하고 쉽고 표현하기 쉽게 컴퓨터 언어를 디자인해 놓은 문맥)
• (computing) Additions to a computer language that make code easier for humans
to read or write, but that do not change the functionality or expressiveness of the
language. -Wikipidea
Every Operation is a Method Call
• 객체가 갖고 있는 것
• 클래스 상속 구조
• 객체의 속성과 메소드
• 메소드에 대한 정보
리플렉션 (Reflection)
루비와 같은 동적 언어의 많은 장점 중 하나는 인트로스페션(introspection)이 가능하다는 점이다.
즉 프로그램 스스로 자기자신의 생긴 모양을 살펴 볼 수 있다는 의미.
Every Operation is a Method Call
• 원하는 클래스의 객체 사용현황파악
• (※Fixnum,Symbol,true,nill등 즉시 값을 갖는 객체는 사용불가)
• ObjectSpace.each_object(Some_class) {|x| p x}
리플렉션 (Reflection)
Every Operation is a Method Call
• 인스턴스내의 메소드 확인
instance name.respond_to(“method name”)
리플렉션 (Reflection)
Every Operation is a Method Call
• 객체(인스턴스)에 대해서 살펴보는 것은 리플렉션의 한 측면 일 뿐
• 전체 그림을 얻기 위해서는 클래스에 대해서도 알아야 한다.
리플렉션 (Reflection)
Every Operation is a Method Call
• 객체(인스턴스)에 대해서 살펴보는 것은 리플렉션의 한 측면 일 뿐
• 전체 그림을 얻기 위해서는 클래스에 대해서도 알아야 한다.
리플렉션 (Reflection)
Every Operation is a Method Call
• “if something looks like a duck and quacks like a duck, it might as well be a duck.”
• “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.”
• 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다.
Duck Typing ; ( Viewpoint, philosophy )
EverythingEverything
is object
in Ruby.
Reflection.
Typing
Duck
Typing
Every Operation is a Method Call
• “if something looks like a duck and quacks like a duck, it might as well be a duck.”
• “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.”
• 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다.
Duck Typing ; ( Viewpoint, philosophy )
치킨
배달원이
겠지?
치킨만 받으면 OK! 치킨만 고객이 받으면 OK!
Every Operation is a Method Call
• “if something looks like a duck and quacks like a duck, it might as well be a duck.”
• “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.”
• 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다.
Duck Typing ; ( Viewpoint, philosophy )
Fileopen.class 파일열기class FileManagement{class FileManagement{
class FileManagement{
public void main(String Args[])
Fileopen.class
Modify.class
Save.class
파일열기
수정하기
저장하기
class FileManagement{
public void main(String Args[])
if ( ! Fileopen 의 인스턴스?){…}
if ( ! Modify 의 인스턴스?){…}
if ( ! Save 의 인스턴스?){…}
…
}
class FileManagement{
public void main(String Args[])
if ( ! Fileopen 의 기능이 있는가?){…}
if ( ! Modify 의 기능이 있는가?){…}
if ( ! Save 의 기능이 있는가?){…}
…
}
if ( ! Fileopen 의 기능이 있는가?){…}
if ( ! Modify 의 기능이 있는가?){…}
if ( ! Save 의 기능이 있는가?){…}
루비는 Dynamic typing으로 인해 변수
의 타입은 가변적이다.
따라서 사용자가 올바르게, 상황에 맞춰
사용하면 된다.
 오리처럼 보이고, 오리처럼 울면된
다. 자유방임주의(laissez-faire)
…
}
Every Operation is a Method Call
Duck Typing ; ( Viewpoint, philosophy )
클래스 타입 비교 - JAVA, C#
Every Operation is a Method Call
Duck Typing ; ( Viewpoint, philosophy )
객체 보유 함수(메소드) 기준 검사
Every Operation is a Method Call
Duck Typing ; ( Viewpoint, philosophy )
자유방임주의스타일 (laissez-faire)
Every Operation is a Method Call
• lets us define new code at runtime.
메타프로그래밍(metaprogramming)
Every Operation is a Method Call
Iterator (Do-While)
Begin
#doing Something.
End while (true) #While not false or not nil.
Iterator (Do-While)
Begin
#doing Something.
End while (true) #While not false or not nil.
Iterator (While)
while (true) do #While not false or not nil
#doing Something.
End
Iterator (While)
while (true) do #While not false or not nil
#doing Something.
End
Iterator (For)
for var in collection
#doing Something.
End
Iterator (For)
for var in collection
#doing Something.
End
Iterator (Use the method)
Iterator (Each; Enumerable)
Collection.each do |var| doing something end
Collection.each { |var| doing something }
Hash, Array, Range 등 많은 클래스에 정의되어 있는 each!
Blocks and Yield
Def call_back
puts “Start of method”
yield
yield
puts “End of method”
End
Result :
Start of method
In the block
In the block
End of method
Yield : 넘겨주다, 양도하다
인스턴스명.메소드명(argument) {|parameter| doing something.}
End
Call_block {puts “In the block”}
Def call_block
yield(“hello”, 99)
End
call_block {|str, num| …} blockblock
Blocks and Yield
Blocks and Yield
Yield : 넘겨주다, 양도하다
인스턴스명.메소드명(argument) {|parameter| doing something.}
blockblock
Block을 통해 inner function 또는 inner method를 구현 할 수 있다.
Blocks and Yield
인스턴스명.메소드명(argument) {|parameter| doing something.}
Blocks and Yield
Yield : 넘겨주다, 양도하다
인스턴스명.메소드명(argument) {|parameter| doing something.}
Blocks and Yield
Def each
for each element
yield(element)
end
end
※추측
Each 반복자의 구성은 다음과 같을 것이다.
Proc & Lambda : Savable Blocks!
Proc & Lambda : Savable Blocks!
Proc Proc.new { puts "Hello!" }
Lambda lambda { puts "Hello!" }
Proc & Lambda : Savable Blocks!
Proc Lambda
Checking Arguments X O
if you pass it the wrong number of
arguments
Ignore
andassign nil
throw an error
control back to the calling method X O
즉시종료 통제권반환
closure
closure : 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다.
내부함수는 외부함수의 지역변수에 접근 할 수 있는데,
외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있다.
이러한 메커니즘을 클로저라고 한다.
1
2
3
4
5
6
function factory_movie(title){
return {
get_title : function (){
return title;
실행결과
Ghost in the shell -> Matrix -> 공각기동대 -> Matrix
Javascript
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
return title;
},
set_title : function(_title){
title = _title
}
}
}
ghost = factory_movie('Ghost in the shell');
matrix = factory_movie('Matrix');
alert(ghost.get_title());
alert(matrix.get_title());
ghost.set_title('공각기동대');
alert(ghost.get_title());
alert(matrix.get_title());
closure
closure : 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다.
내부함수는 외부함수의 지역변수에 접근 할 수 있는데,
외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있다.
이러한 메커니즘을 클로저라고 한다.
함수(메소드) A
int var1 1) Test = 함수 A
2) Test 실행
return 함수(메소드) B
함수(메소드) B
print var1
2) Test 실행
3) 결과?
Var1이 나오는가 안나오는가?
Block
Proc
Lambda
closure
closure
def multiply(m) test = multiply(2) -> 외부함수 변수대입def multiply(m)
n = m
return lambda{|data|data.collect{|x| x*n}}
end
test = multiply(2)
puts test.call([1,2,3])
test = multiply(2) -> 외부함수 변수대입
def multiply(2)
n = 2
return lambda{|data|data.collect{|x| x*2}}
end
puts test.call([1,2,3]) ->
lambda{|[1,2,3]|[1,2,3].collect{|x| x*2}}
Lambda 는 정의된 범위 밖에서 사용되고, 메서드 인수 n을
가두므로(Close Over) 클로저(Closure)라고 한다.
closure
Lambda 는 정의된 범위 밖에서 사용되고, 메서드 인수 n을
가두므로(Close Over) 클로저(Closure)라고 한다.
Private 변수처럼 이용하는 모습
- OOP에서 하나의 인스턴스와 유사하게 보인다.
closure
class
class
생성자 (Constructor)
인스턴스 변수(instance variable)
인스턴스화 (Instantiating)
Kinds of Variables
First letter Kinds Default value Example
Lowercase or _ Local variable
지역 변수
참조 전 대입 local_var
@ Instance variable
인스턴스 변수
Nil @instance_var
@@ Class variable 참조 전 대입 @@class_var@@ Class variable
클래스 변수
참조 전 대입 @@class_var
$ Grobal variable
전역 변수
Nil $global_var
Uppercase Constant
상수
참조 전 대입 CONSTANT_VAR
Inheritance
Methods visibility
Modules & Mix-in
기능 (Method) :
날씨별 음악재생기능
변수(Constant value) :
습도 80% = 80
속
도
온
도
1936년 부가티 타입 57SC
아틀란틱
Alias = my car
Instance class
Instance
Modules & Mix-in
Modules & Mix-in
mix-in :
A mix-in is a set of related behaviors that can be added to any class.-
Fox, Armando; Patterson, David (2014-01-03). Engineering Software as a Service: An
Agile Approach Using Cloud Computing
NinJA
test
1
NinJA
NinJASon
test
1
test
2
※ 모듈은
상속되지 않는다.
Modules & Mix-in
Modules & Mix-in
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
현찬 양
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
민태 김
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
Sung-hoon Ma
 
비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1
민태 김
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
Dong Chan Shin
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
민태 김
 

Was ist angesagt? (20)

Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
 
C++ 2학기 수행평가
C++ 2학기 수행평가C++ 2학기 수행평가
C++ 2학기 수행평가
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Java tutorial
Java tutorialJava tutorial
Java tutorial
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
 
5 6 1
5 6 15 6 1
5 6 1
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
C++ Advanced 강의 소개
C++ Advanced 강의 소개C++ Advanced 강의 소개
C++ Advanced 강의 소개
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
2016 hack festival igrus
2016 hack festival igrus2016 hack festival igrus
2016 hack festival igrus
 
비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3Effective C++ 정리 chapter 3
Effective C++ 정리 chapter 3
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
Why what how kotlin
Why what how kotlinWhy what how kotlin
Why what how kotlin
 
Mt
MtMt
Mt
 

Ähnlich wie How to use the Ruby programing language

[A1]루비는 패셔니스타
[A1]루비는 패셔니스타[A1]루비는 패셔니스타
[A1]루비는 패셔니스타
NAVER D2
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
QooJuice
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
Injae Lee
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
유진 변
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4
Dong Chan Shin
 

Ähnlich wie How to use the Ruby programing language (20)

스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
[A1]루비는 패셔니스타
[A1]루비는 패셔니스타[A1]루비는 패셔니스타
[A1]루비는 패셔니스타
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 
Communism OOP
Communism OOPCommunism OOP
Communism OOP
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1
 
유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
Working with code
Working with codeWorking with code
Working with code
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4
 

Mehr von JaeYeoul Ahn (6)

Trumpia fp study
Trumpia fp studyTrumpia fp study
Trumpia fp study
 
[DomainDriven 6월 정기세미나] Eclipse Platform의 Test, build 에서 CI까지
[DomainDriven 6월 정기세미나] Eclipse Platform의 Test, build 에서 CI까지[DomainDriven 6월 정기세미나] Eclipse Platform의 Test, build 에서 CI까지
[DomainDriven 6월 정기세미나] Eclipse Platform의 Test, build 에서 CI까지
 
Mitm(man in the middle) ssl proxy attacks
Mitm(man in the middle) ssl proxy attacksMitm(man in the middle) ssl proxy attacks
Mitm(man in the middle) ssl proxy attacks
 
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
 
16년도 하반기 국민대 BIT 전자정부 연구실 학생모집 1
16년도 하반기 국민대 BIT 전자정부 연구실 학생모집 116년도 하반기 국민대 BIT 전자정부 연구실 학생모집 1
16년도 하반기 국민대 BIT 전자정부 연구실 학생모집 1
 
Java 다형성
Java 다형성Java 다형성
Java 다형성
 

How to use the Ruby programing language

  • 1. Kookmin University Graduate School of Busuness IT e-Government System Development 석사 1학기 안 재열
  • 2. What is the Ruby? • meaning reading and writing Ruby is really easy— • it looks a lot like regular English!High-level • meaning you don't need a compiler to write and run Ruby.InterpretedInterpreted • everything in Ruby is an object.Object-oriented • Marts design a language that emphasized human needs over tho se of the computer, which is why Ruby is so easy to pick up.Easy to use
  • 3. What is the Ruby?
  • 4. Who made the Ruby? • 마츠모토 유키히로 • 프로그래머 • 마츠모토 유키히로 는 루비를 개발한 프로그래머이다. 일본 오사카 부 태생. 고등학교까지 독학으로 프로그 래밍을 익혔으며, 쓰쿠바 대학교 정보학부를 나와, • 시마네대학 대학원에서 박사과정을 취득했다. 2006 년 현재, 시마네 현에서 오픈소스 관련 회사인 네트워 크 응용통신 연구소의 특별 연구원으로 재직하고 있 다. 마츠모토는 결혼하여 4명의 아이들이 있다. • 출생: 1965년 4월 14일 (49세), 일본 오사카 부 오사카 시 • 학력: 쓰쿠바 대학
  • 5. Why made the Ruby? • 마츠모토 유키히로 : 프로그램을 짜는 것이 쉬워즈는 것 뿐만 아니라, • 프로그래머가 즐거워지도록 설계했습니다. • 저는 많은 프로그래밍 언어를 알지만, 그 어느것에서도 만 족할 수 없었습니다. 제가 기대한 것 보다 보기 흉하거나, 거칠거나, 복잡하거나, 너무 간단했습니다. • 그래서 스스로 만졸할만한 자신만의 언어를 만들고 싶었습 니다. 자신을 위한 언어라서 어디가 가려운 곳인지 잘 알고 있었습니다. 깜짝놀란 것은 이세상에는 저처럼 느끼는 프로 그래머가 수없이 많다는 것입니다. • 루비를 개발하면서 프로그래밍을 더 빠르고 ‘쉽게’ 하는데 집중했습니다.
  • 7. Cloud 9 (Saas) • https://c9.io • Ubuntu + Rails + Ruby + IDE_Tool +(Git Hub)
  • 8. Reference 저자: 유키히로마츠모토 Rubyists bible 마틴파울러추천저자: 유키히로마츠모토 마틴파울러추천 유키히로추천 실습위주 뼈대잡기, 훝기….
  • 10. Everything is object in Ruby • (※ 주석은 #으로 시작하고 =>는 명령어를 실행했을때 반환되는 값을 나타냅니다.) 1.class #=>Fixnum 0.0.class #=>Float True.class #=>TrueClass False.class #=>FalseClass Nil.class #=>NilClass False.class #=>FalseClass Nil.class #=>NilClass 1.class #=>Fixnum Method (메소드)
  • 11. Method in Ruby • Method form in ruby def (parameter1, parameter2, parameter3…) Doing Something end • Parentheses are usually optional in Ruby. • 보통 parameter 혹은 리턴의 대상이 한 개일 때 생략한다. end
  • 12. Method in Ruby • Implicit Return • Parentheses are usually optional in Ruby. • 보통 parameter 혹은 리턴의 대상이 한 개일 때 생략한다. Interpolation 보간법
  • 13. Interpolation • Interpolation • Interpolation allows Ruby code to appear within a string. The result of evaluating t hat code is inserted into the string: • "1 + 2 = #{1 + 2}" #=> "1 + 2 = 3" #{expression}
  • 14. The end of the sentence • Usually, Every sentence should be ended by semi-colon in ‘Java’ or ‘C‘ • But in Ruby, Don’t care about it. 불완전한문장(이어짐) 완전한문장(종료)완전한문장(종료) 문장연결
  • 15. Interpolation • Interpolation • Interpolation allows Ruby code to appear within a string. The result of evaluating t hat code is inserted into the string: • "1 + 2 = #{1 + 2}" #=> "1 + 2 = 3" #{expression}
  • 16. Dynamic Typing • Ruby is dynamically typed: the type of a variable is generally not inferable until runtime. So s=5 can follow s=” foo” in the same block of code. • Because variables do not have types.
  • 17. Dynamic Typing • Ruby is dynamically typed: the type of a variable is generally not inferable until runtime. So s=5 can follow s=” foo” in the same block of code. • Because variables do not have types.
  • 18. Dynamic Typing • Ruby is dynamically typed: the type of a variable is generally not inferable until runtime. So s=5 can follow s=” foo” in the same block of code. • Because variables do not have types.
  • 19. Every Operation is a Method Call • every operation is a method call, note that even basic math operations • such as +, *, = = (equality comparison) are ‘syntactic sugar’ for method calls
  • 20. Every Operation is a Method Call • every operation is a method call, note that even basic math operations • such as +, *, = = (equality comparison) are ‘syntactic sugar’ for method calls • syntactic sugar (사람이 이해하고 쉽고 표현하기 쉽게 컴퓨터 언어를 디자인해 놓은 문맥) • (computing) Additions to a computer language that make code easier for humans to read or write, but that do not change the functionality or expressiveness of the language. -Wikipidea
  • 21. Every Operation is a Method Call • 객체가 갖고 있는 것 • 클래스 상속 구조 • 객체의 속성과 메소드 • 메소드에 대한 정보 리플렉션 (Reflection) 루비와 같은 동적 언어의 많은 장점 중 하나는 인트로스페션(introspection)이 가능하다는 점이다. 즉 프로그램 스스로 자기자신의 생긴 모양을 살펴 볼 수 있다는 의미.
  • 22. Every Operation is a Method Call • 원하는 클래스의 객체 사용현황파악 • (※Fixnum,Symbol,true,nill등 즉시 값을 갖는 객체는 사용불가) • ObjectSpace.each_object(Some_class) {|x| p x} 리플렉션 (Reflection)
  • 23. Every Operation is a Method Call • 인스턴스내의 메소드 확인 instance name.respond_to(“method name”) 리플렉션 (Reflection)
  • 24. Every Operation is a Method Call • 객체(인스턴스)에 대해서 살펴보는 것은 리플렉션의 한 측면 일 뿐 • 전체 그림을 얻기 위해서는 클래스에 대해서도 알아야 한다. 리플렉션 (Reflection)
  • 25. Every Operation is a Method Call • 객체(인스턴스)에 대해서 살펴보는 것은 리플렉션의 한 측면 일 뿐 • 전체 그림을 얻기 위해서는 클래스에 대해서도 알아야 한다. 리플렉션 (Reflection)
  • 26. Every Operation is a Method Call • “if something looks like a duck and quacks like a duck, it might as well be a duck.” • “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.” • 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다. Duck Typing ; ( Viewpoint, philosophy ) EverythingEverything is object in Ruby. Reflection. Typing Duck Typing
  • 27. Every Operation is a Method Call • “if something looks like a duck and quacks like a duck, it might as well be a duck.” • “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.” • 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다. Duck Typing ; ( Viewpoint, philosophy ) 치킨 배달원이 겠지? 치킨만 받으면 OK! 치킨만 고객이 받으면 OK!
  • 28. Every Operation is a Method Call • “if something looks like a duck and quacks like a duck, it might as well be a duck.” • “오리처럼 보이고, 오리처럼 울면, 그건 오리일 것이다.” • 객체의 타입은 클래스에 의해서가 아니라, 무엇을 할 수 있는가에 의해 결정되는 것이다. Duck Typing ; ( Viewpoint, philosophy ) Fileopen.class 파일열기class FileManagement{class FileManagement{ class FileManagement{ public void main(String Args[]) Fileopen.class Modify.class Save.class 파일열기 수정하기 저장하기 class FileManagement{ public void main(String Args[]) if ( ! Fileopen 의 인스턴스?){…} if ( ! Modify 의 인스턴스?){…} if ( ! Save 의 인스턴스?){…} … } class FileManagement{ public void main(String Args[]) if ( ! Fileopen 의 기능이 있는가?){…} if ( ! Modify 의 기능이 있는가?){…} if ( ! Save 의 기능이 있는가?){…} … } if ( ! Fileopen 의 기능이 있는가?){…} if ( ! Modify 의 기능이 있는가?){…} if ( ! Save 의 기능이 있는가?){…} 루비는 Dynamic typing으로 인해 변수 의 타입은 가변적이다. 따라서 사용자가 올바르게, 상황에 맞춰 사용하면 된다.  오리처럼 보이고, 오리처럼 울면된 다. 자유방임주의(laissez-faire) … }
  • 29. Every Operation is a Method Call Duck Typing ; ( Viewpoint, philosophy ) 클래스 타입 비교 - JAVA, C#
  • 30. Every Operation is a Method Call Duck Typing ; ( Viewpoint, philosophy ) 객체 보유 함수(메소드) 기준 검사
  • 31. Every Operation is a Method Call Duck Typing ; ( Viewpoint, philosophy ) 자유방임주의스타일 (laissez-faire)
  • 32. Every Operation is a Method Call • lets us define new code at runtime. 메타프로그래밍(metaprogramming)
  • 33. Every Operation is a Method Call
  • 34. Iterator (Do-While) Begin #doing Something. End while (true) #While not false or not nil.
  • 35. Iterator (Do-While) Begin #doing Something. End while (true) #While not false or not nil.
  • 36. Iterator (While) while (true) do #While not false or not nil #doing Something. End
  • 37. Iterator (While) while (true) do #While not false or not nil #doing Something. End
  • 38. Iterator (For) for var in collection #doing Something. End
  • 39. Iterator (For) for var in collection #doing Something. End
  • 40. Iterator (Use the method)
  • 41. Iterator (Each; Enumerable) Collection.each do |var| doing something end Collection.each { |var| doing something } Hash, Array, Range 등 많은 클래스에 정의되어 있는 each!
  • 42. Blocks and Yield Def call_back puts “Start of method” yield yield puts “End of method” End Result : Start of method In the block In the block End of method Yield : 넘겨주다, 양도하다 인스턴스명.메소드명(argument) {|parameter| doing something.} End Call_block {puts “In the block”} Def call_block yield(“hello”, 99) End call_block {|str, num| …} blockblock
  • 44. Blocks and Yield Yield : 넘겨주다, 양도하다 인스턴스명.메소드명(argument) {|parameter| doing something.} blockblock Block을 통해 inner function 또는 inner method를 구현 할 수 있다.
  • 46. Blocks and Yield Yield : 넘겨주다, 양도하다 인스턴스명.메소드명(argument) {|parameter| doing something.}
  • 47. Blocks and Yield Def each for each element yield(element) end end ※추측 Each 반복자의 구성은 다음과 같을 것이다.
  • 48. Proc & Lambda : Savable Blocks!
  • 49. Proc & Lambda : Savable Blocks! Proc Proc.new { puts "Hello!" } Lambda lambda { puts "Hello!" }
  • 50. Proc & Lambda : Savable Blocks! Proc Lambda Checking Arguments X O if you pass it the wrong number of arguments Ignore andassign nil throw an error control back to the calling method X O 즉시종료 통제권반환
  • 51. closure closure : 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다. 내부함수는 외부함수의 지역변수에 접근 할 수 있는데, 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있다. 이러한 메커니즘을 클로저라고 한다. 1 2 3 4 5 6 function factory_movie(title){ return { get_title : function (){ return title; 실행결과 Ghost in the shell -> Matrix -> 공각기동대 -> Matrix Javascript 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 return title; }, set_title : function(_title){ title = _title } } } ghost = factory_movie('Ghost in the shell'); matrix = factory_movie('Matrix'); alert(ghost.get_title()); alert(matrix.get_title()); ghost.set_title('공각기동대'); alert(ghost.get_title()); alert(matrix.get_title());
  • 52. closure closure : 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다. 내부함수는 외부함수의 지역변수에 접근 할 수 있는데, 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있다. 이러한 메커니즘을 클로저라고 한다. 함수(메소드) A int var1 1) Test = 함수 A 2) Test 실행 return 함수(메소드) B 함수(메소드) B print var1 2) Test 실행 3) 결과? Var1이 나오는가 안나오는가? Block Proc Lambda
  • 54. closure def multiply(m) test = multiply(2) -> 외부함수 변수대입def multiply(m) n = m return lambda{|data|data.collect{|x| x*n}} end test = multiply(2) puts test.call([1,2,3]) test = multiply(2) -> 외부함수 변수대입 def multiply(2) n = 2 return lambda{|data|data.collect{|x| x*2}} end puts test.call([1,2,3]) -> lambda{|[1,2,3]|[1,2,3].collect{|x| x*2}} Lambda 는 정의된 범위 밖에서 사용되고, 메서드 인수 n을 가두므로(Close Over) 클로저(Closure)라고 한다.
  • 55. closure Lambda 는 정의된 범위 밖에서 사용되고, 메서드 인수 n을 가두므로(Close Over) 클로저(Closure)라고 한다. Private 변수처럼 이용하는 모습 - OOP에서 하나의 인스턴스와 유사하게 보인다.
  • 57. class
  • 58. class 생성자 (Constructor) 인스턴스 변수(instance variable) 인스턴스화 (Instantiating)
  • 59. Kinds of Variables First letter Kinds Default value Example Lowercase or _ Local variable 지역 변수 참조 전 대입 local_var @ Instance variable 인스턴스 변수 Nil @instance_var @@ Class variable 참조 전 대입 @@class_var@@ Class variable 클래스 변수 참조 전 대입 @@class_var $ Grobal variable 전역 변수 Nil $global_var Uppercase Constant 상수 참조 전 대입 CONSTANT_VAR
  • 62. Modules & Mix-in 기능 (Method) : 날씨별 음악재생기능 변수(Constant value) : 습도 80% = 80 속 도 온 도 1936년 부가티 타입 57SC 아틀란틱 Alias = my car Instance class Instance
  • 64. Modules & Mix-in mix-in : A mix-in is a set of related behaviors that can be added to any class.- Fox, Armando; Patterson, David (2014-01-03). Engineering Software as a Service: An Agile Approach Using Cloud Computing NinJA test 1 NinJA NinJASon test 1 test 2 ※ 모듈은 상속되지 않는다.