[Ruby] 루비랑 놀아요💎

sunaaa·2021년 4월 12일
1

💎Ruby의 철학

"스트레스가 없는 쉬운 프로그래밍을 지향하고 우리의 삶을 반영해야 하며, 프로그래밍 언어는 컴퓨터가 아닌, 인간 중심으로 설계되어야 한다."

💎 루비 학습 자료

💎 루비의 장단점

  • Java&Spring 개발자가 Ruby on Rails 를 해보고 마주친 생각들
  • 루비의 장점1 : Ruby는 간결함과 생산성이 강조된 언어입니다. 그렇기 때문에 어느 정도 익숙해지면 개발하는 속도가 매우 빠름. 웹사이트를 만들려고 할 때, 가장 빨리 만들 수 있는 언어가 바로 Ruby라고함.
  • 루비의 장점2 : Ruby의 최대 장점은 확장성과 이식성이 매우 높다는 것. 그렇기 때문에 유지보수에 드는 노력 또한 매우 절약해줌. Python이나 JavaScript 등 다른 언어로 개발된 라이브러리를 Ruby 위에 구현할 수도 있음.

아래 영상 15분부터 ~ 루비를 쓰면 얼마나 빨리 개발이 가능한 지 보여줌.

  • 루비의 최대 단점 : 속도가 느림. 아예 대규모 서비스에서는 실행 속도 측면에서 걸리기 때문에 이용하기 어려움. 협업이 필요한 대형 프로젝트에서는 Ruby가 쓰이기 부적합함.

  • 결론 : 웹사이트를 쉽고 빠르게 만들 수 있기 때문에 동접자가 많지 않은 간단한 사이트를 구축할 때, 프로토타입을 만들 때 이용하는 것이 좋음. 스타트업처럼 빠르게 작은 서비스를 자주 출시해서 소비자의 반응을 봐야 할 때 이용하기 가장 좋은 언어. 고객 중심의 서비스를 보다 빨리 개발하는 데에 목적이 있다면, 적합한 환경.

  • Ruby on Rails는 Ruby의 웹 프로그래밍 프레임워크

  • 대부분의 초기 스타트업 사이트, Github이나 Twitter도 Ruby로 만들어졌음. 규모가 커지면 Java기반의 언어 등으로 갈아탐.

💎 루비와 대화하기

루비에는 당신이 입력한 루비 구문을 바로 결과로 보여주는 프로그램이 동봉되어 있습니다. 대화형 세션에서 루비 코드를 가지고 노는 것은 루비를 배울 수 있는 훌륭한 방법입니다!

  • 대화형 루비셀(irb)
    irbInteractive Ruby의 약자!
  • 루비 hello : irb
  • 루비 goodbye : quit 또는 exit이라고 입력하거나 Ctrl-D

=>nil이 mojo? 사람 이름인줄......

  • puts 명령어는 언제나 nil을 반환합니다. 루비에서의 nil은 절대적으로 아무것도 없는(absolutely-positively-nothing) 값입니다.
irb(main):010:0> def h
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> :h
irb(main):013:0> h
Hello World!
=> nil
irb(main):014:0> h()
Hello World!
=> nil
irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> :h
irb(main):018:0> h("Matz")
Hello Matz!
=> nil
irb(main):019:0> def h(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> :h
irb(main):022:0> h "chris"
Hello Chris!
=> nil
irb(main):023:0> h
Hello World!
=> nil

다른 프로그래밍 언어에서 for반복문을 사용해 리스트의 내용물을 아래처럼 처리하는 것

for (i=0; i<number_of_elements; i++)
{
  do_something_with(element[i]);
}

루비에서는 이렇게 한다.
임시변수인 i가 필요하지 않고, 리스트의 길이를 계산하지 않아도 됨. 핵심적이지 않은 코드는 each 안에 숨겨버렸음. 각 내용물을 가지고 무엇을 할 것인지만 정하면 됨.

@names.each do |name| 
  puts "Hello #{name}!"
end
# each는 코드블록을 넘겨 받아 리스트의 각 원소에 순차적으로 적용시키는 메서드. 
# do와 end 사이의 코드가 블록. 블록은 익명함수 또는 lambda와 유사.
# 두개의 | 사이의 변수는 이 블록에 넘겨지는 매개변수

뿐만 아니라 각종 셋업 코드, 에러처리를 모두 사용자가 신경쓰지 않아도 되도록 해줌.

# Say bye to everybody
def say_bye
  if @names.nil?
    puts "..."
  elsif @names.respond_to?("join")
    # Join the list elements with commas
    puts "Goodbye #{@names.join(", ")}.  Come back soon!"
  else
    puts "Goodbye #{@names}.  Come back soon!"
  end
end
# say_bye 메서드는 each 메서드를 사용하지 않는다.
# ay_bye 메서드는 단지 @names가 join 메서드를 가졌는지 확인하고, 가지고 있다면 join 하고 있다. 
# 그렇지 않다면, 변수를 문자열로 출력만 한다. 
# 이 메서드는 변수의 실제 타입은 신경을 쓰지 않는다. 
# 이처럼 단지 어떤 메서드만을 가지고 있는지에 의존하는 것을 덕 타이핑(Duck Typing)이라고 부름. 
# “만약 오리처럼 걷고 오리처럼 꽥꽥거리면…”
# 이런 방식의 장점은 어떤 타입의 변수를 지원할 것인지를 제한할 필요가 없다는 것. 
# 만약 새로운 종류의 list 클래스를 정의했다고 해도, 거기에 join 메서드만 정의되어 있으면 잘 동작함..
profile
Be Playful Front-end Developer

2개의 댓글

comment-user-thumbnail
2021년 4월 18일

루비도 뿌수자고요~~

1개의 답글