-
Ruby VS Python 뭐가 다를까? [1부]💻 프로그래밍/Ruby On Rails 2021. 3. 12. 23:06
안녕하세요! 운동하는 개발자 JAY입니다.
오늘은 비스~~읏 하다고 알려져(?) 있는 Ruby와 Python 에 대해서 뭐가 다른지 어떻게 사용되는지 비교해보려고 합니다.
Deep한 내용은 아니고 문법적으로 무엇이 다르고, 장단점 등을 비교해보려고 합니다.
아! 두 언어의 문법을 비교하기전 제가 사용한 언어 버전에 대해서 먼저 공유하겠습니다.
python : 3.8.5
ruby: 2.6.5그리고 Ruby 공부 하려고 개발환경을 따로 세팅하려다가 구름 IDE를 사용하면 편하게 스터디용(?)으로 사용할 수 있더라고요. 무료로 5개의 컨테이너를 만들 수 있고 ruby뿐만 아니라 다양한 서버 프레임워크를 공부하기 쉽습니다.
저는 구름 IDE에서 컨테이너 만들어서 스터디를 했습니다!
👨💻 문법 비교
1. 문자열 출력
- Ruby♦️
score = 100puts "무야호!"puts "제 점수는요 #{score}"cs - Python🐍
score = 100print("무야호!")print(f"제 점수는요 {score}")cs 가장 기본적인 문자열 출력부터 봤을 때, Ruby는 좀 더 간결한 문법을 지향하는 것 같습니다. 괄호 같은 게 아예 없는 게 python과 ruby의 다른 점 중 하나인 것 같아요. 변수를 저렇게 string에 바로 넣는 건 python, ruby 둘 다 좋은 것 같습니다.
2. 반복문 (for loop)
- Ruby♦️
# range를 줘서 for loop를 실행하는 경우for i in 0..5puts "#{i}"end# list를 for loop로 돌려서 실행하는 경우user_ids = [1111, 2222, 3333, 4444, 5555]for user_id in user_idsif user_id == 2222nextelsif user_id == 4444breakendputs "user id : #{user_id}"end# list size로 range를 줘서 index에 맞는 값을 출력하는 경우members = ['jay', 'zzeri', 'kanz', 'fernando']for index in 0 .. members.size # ... 과 .. 차이 있는건가? 똑같이 동작하긴하는데puts members[index]end# list for loopfor member in membersputs memberendcs - Python🐍
for i in range(0, 5):print(f"{i}")user_ids = [1111, 2222, 3333, 4444, 5555]for user_id in user_ids:if user_id == 2222:continueelif user_id == 4444:breakprint(f"user id : {user_id}")members = ['jay', 'zzeri', 'kanz', 'fernando']for index in range(0, len(members)):print(members[index])for member in members:print(member)cs 일단 Ruby, Python 둘 다 매우 비슷합니다. 다만 Ruby의 경우 range라는 함수 없이 0 .. 5 이런 식으로 range를 줄 수 있고, Ruby는 : 으로 구분 짓는 게 아닌 문법들의 구분을 end 로 해줍니다. 약간 쉘 스크립트 보는 기분이네요!
for loop도 그다지 큰 차이는 없는 것 같습니다.
3. 반복문 (while)
- Ruby♦️
num = 0while num < 10puts "출력 #{num}!"num += 1endcs - Python🐍
num = 0while num < 10:print(f"출력 {num}!")num += 1cs while 도 둘 다 비슷비슷합니다ㅋㅋ
4. null 표현
- Ruby♦️
temp_val = nilif temp_val == nilputs 'this is nil(null)'endcs - Python🐍
temp_val = Noneif temp_val is None:print('this is None(null)')cs Ruby는 특이하게 nil이 null 이네요. 사실 nil을 swift에서 처음 봤을 때 "이게 뭐지?" 했는데 진짜 있는 단어더라고요.
5. 조건문 (if)
- Ruby♦️
# 일반적인(?) if문num = 5if 0 < num and num < 5puts "5보다 작아요"elsif 5 <= num and num < 10puts "5이상 이에요"elseputs "큰 숫자네요"end# unlesshas_card = falseunless has_cardputs "카드를 가지고 있지 않아요."elseputs "카드를 가지고 있을걸요?"end# unless 한줄로puts "카드를 가지고 있지 않아요." unless has_cardcs - Python🐍
# 일반적인(?) if문num = 5if 0 < num < 5:print("5보다 작아요")elif 5 <= num < 10:print("5이상 이에요")else:print("큰 숫자네요")# unless 이런 문법은 없음cs Python은 조건을 0 < num < 5 이렇게 사용할 수 있는 점이 Ruby보다는 쉬운 것 같습니다 (Ruby도 있는지 잘 모르겠네요.. 속성으로 지금 공부 중이라 ㅋㅋㅋ) 그리고 특이한 게 Ruby는 unless가 있더라고요. if의 반대 조건으로 비교하는 조건문입니다.
그리고 Python, Ruby 둘 다 부정은 not으로 표시하네요.
6. 조건문 (삼항 연산자)
- Ruby♦️
my_score = 90other_score = 60puts my_score > other_score ? "Me!" : "Other!"cs - Python🐍
my_score = 90other_score = 60print("Me!" if my_score > other_score else "Other!")cs python은 따로 삼항 연산자라고 하는 문법이 없습니다. 다만 if문을 저렇게 한 줄로 사용 가능합니다.
7. Switch - Case
- Ruby♦️
num = 2case numwhen 0puts "0"when 1puts "1"when 2puts "2"when 3puts "3"when 4puts "4"end# switch - case 축약num = 2case numwhen 0 then puts "0"when 1 then puts "1"when 2 then puts "2"when 3 then puts "3"when 4 then puts "4"endcs python은 switch-case 문법을 제공하지 않습니다. 고려는 했다고 하는데, if-elif와 dictionary를 대신 사용합니다. python 개발을 하면서 크게 switch-case가 없어서 불편했던 적은 없는 것 같습니다.
8. hash 와 dictionary
- Ruby♦️
user_score = {'jay' => 10,'zzeri' => 50,'kanz' => 30,'fernando' => 20}user_score['test'] = 210puts user_score['test']cs - Python🐍
user_score = {'jay': 10,'zzeri': 50,'kanz': 30,'fernando': 20}user_score['test'] = 210print(user_score['test'])cs Ruby에서는 hash라 하고 Python에서는 dictionary 라고 합니다. 둘 다 key-value 형식으로 사용됩니다. 다만 Ruby에서 key-value 정의할 때 Ruby 버전에 따라 =>, : 이 다르다고 합니다.
9. 반복자 (iterator)
- Ruby♦️
temp = [1, 2, 3, 4, 5]temp.each { | a | puts a } # 이름이 없는 메소드를 의미한다# # hashuser_score = {'jay' => 10,'zzeri' => 50,'kanz' => 30,'fernando' => 20}select_users = user_score.select {|k| k.size == 4}puts select_userscs - Python🐍
temp = [1, 2, 3, 4, 5]print(n for n in temp)user_score = {'jay': 10,'zzeri': 50,'kanz': 30,'fernando': 20}select_users = {key: val for key, val in user_score.items() if len(key) == 4}print(select_users)cs 이 부분이 Ruby와 Python의 가장 큰 차이점들이 있는 것 같습니다.
Ruby의 경우 { |변수| } 형식의 Blocks(클로저, 익명 함수와 비슷)를 생성할 수 있습니다. 이게 가장 크게 문법적 차이에서 느낄 수 있는 게 두 번째 select_users를 추출하는 로직입니다.# Blocks : 클로저, 익명함수와 비슷, 이름업슨ㄴ 메서드를 생성하는 방법# 두가지 방법으로 정의 가능 do ... end, {} - |변수|temp_list = [1, 2, 3, 4]temp_list.each do |n| puts n endtemp_list.each {|n| puts n}cs Ruby의 경우 이 클로저와 select라는 메서드를 이용해 원하는 조건의 값들을 뽑아낼 수 있습니다. 하지만 python의 경우 list comprehension을 사용하더라도 Ruby에 비하면 상당히 길어지는 걸 볼 수 있습니다.
이런 점에서는 Ruby가 좀 더 쉽고 간결하게 로직을 짤 수 있는 것 같습니다.
👋 마치며
1부를 마치며, Ruby와 Python의 비슷하지만 다른 문법적 차이에 대해서 알아보았습니다. 둘 다 다른 언어들에 비해 간결하게 작성할 수 있지만 특히 Ruby의 경우 더 그런 것 같습니다.
Python의 list comprehention 보다 Ruby 더 간결하고 쉽게 blocks와 select, each 등의 함수 등을 이용해서 값을 추출할 수 있는 부분들이 개인적으로 인상 깊었던 것 같습니다.
2부에서는 class, method 구현에 대해서 비교해보도록 하겠습니다.
그럼 좋은 하루 보내세요!
'💻 프로그래밍 > Ruby On Rails' 카테고리의 다른 글
Ruby On Rails 맛보기 - model (0) 2021.03.14 Ruby On Rails 맛보기 - controller, view (0) 2021.03.14 Ruby VS Python 뭐가 다를까? [2부] (0) 2021.03.13