Search
💎

Ruby

I. 기본 문법

1. 기초 개념

Methods
def greet(name) "Hello, #{name}!" end puts greet("Alice")
Ruby
복사
Symbols
변경불가(Immutable)하고 메모리 효율적으로 저장되는 문자열입니다. 왜냐하면 이하의 예시와 같이 같은 이름의 심볼은 동일한 객체이기 때문입니다. 반면 일반 문자열의 경우 각각 다른 객체입니다. 이 사실은 객체를 비교할 때, id를 기준으로 비교하면 상대적으로 빠른 성능을 보여줍니다.
:username :logged_in
Ruby
복사
symbol1 = :my_symbol symbol2 = :my_symbol symbol1.object_id == symbol2.object_id # This will be true string1 = "mystring" string2 = "mystring" string1.object_id == string2.object_id # This will be false
Ruby
복사
IF
age = 18 if age >= 18 puts "Adult" else puts "Minor" end
Ruby
복사
if !condition # code if condition is false end unless condition # code if condition is false end
Ruby
복사
Iterating
# next는 java의 continue와 같다 for i in 1..5 next if i == 3 puts i end
Ruby
복사
[1, 2, 3].each do |num| puts num end
Ruby
복사
def solution(n) (1..n).each do |num| puts num end end
Ruby
복사
Pretty printing
require 'pp' pp [{id: 1, name: "Alice"}, {id: 2, name: "Bob"}]
Ruby
복사
type converting
"5".to_i # 5 "55.5".to_i # 55 "55.5".to_f # 55.5 25.to_s # "25" (25.5).to_s # "25.5" ["Sammy", "Shark"].to_s # "[\"Sammy\", \"Shark\"]" "first_name".to_sym # :first_name
Ruby
복사

2. 문자열 다루기

문자열 붙이기
greeting = "Hello" name = "Alice" message = greeting + ", " + name + "!"
Ruby
복사
변수 집어넣기
age = 30 message = "I am #{age} years old."
Ruby
복사
부분 문자열 추출
str = "Hello Ruby" sub_str1 = str[0, 5] # "Hello" sub_str2 = str[6..-1] # "Ruby"
Ruby
복사
문자열 대체
str = "Hello Python" new_str = str.gsub("Python", "Ruby") # "Hello Ruby"
Ruby
복사
문자 케이스
str = "Hello Ruby" puts str.upcase # Convert to uppercase puts str.downcase # Convert to lowercase
Ruby
복사
공백 제거
str = " Hello Ruby " stripped = str.strip # "Hello Ruby"
Ruby
복사
문자열을 문자 배열로 자르고 다시 합치기
문자열로 다시 합칠 때 연속된 공백 살리기
str = "Hello Ruby" words = str.split(/(\s+)/) # ["Hello", " ", "Ruby"] answer = words.join("") # "Hello Ruby"
Ruby
복사
연속된 공백을 단일 공백으로 처리하기
str = "Hello Ruby" words = str.split(" ") # ["Hello", "Ruby"] answer = words.join(" ") # "Hello Ruby"
Ruby
복사
정규표현식 활용
str = "The year is 2024" year = str[/\d+/] # "2024" def letter?(lookAhead) lookAhead.match?(/[[:alpha:]]/) end def numeric?(lookAhead) lookAhead.match?(/[[:digit:]]/) end
Ruby
복사

3. 메소드 활용

Chaining & Blocks
each: 반환 값이 없이 내부 요소를 토대로 순회합니다
select: Blocks 내부의 조건에 맞는 요소만 남깁니다. python과 java의 filter와 같습니다
map: 내부 요소를 변경합니다.
def solution(n) answer = 0 (1..n).each do |num| if n % num == 0 answer += num end end return answer end # to def solution(n) (1..n).select { |num| n % num == 0 }.sum end
Ruby
복사
def solution(d, budget) answer = [] d.sort.each{|num| answer << num if answer.sum + num <= budget } answer.size end
Ruby
복사
def solution(s) nums = s.split(" ").map {|num| num.to_i } "#{nums.min} #{nums.max}" end
Ruby
복사

4. 컬렉션

Arrays
array = [1, "two", 3.0]
Ruby
복사
Hashes
hash = { name: "Alice", age: 30 }
Ruby
복사

5. 클래스 활용

Accessors(접근자 메소드)
attr_accessor: 읽기 및 쓰기가 모두 가능한 접근자 메소드를 생성합니다.
attr_reader: 읽기만 가능한 접근자 메소드를 생성합니다.
attr_writer: 쓰기만 가능한 접근자 메소드를 생성합니다.
class Userv attr_reader :id attr_accessor :name attr_writer :nickname end user = User.new user.name = "Alice" puts user.name
Ruby
복사
Object variables
class Car def initialize(model) @model = model end end car = Car.new("Toyota")
Ruby
복사
객체 뜯어보기
class Blurb attr_accessor :content, :time, :mood def initialize(mood, content="") @time = Time.now @content = content[0..39] @mood = mood end def moodify if @mood == :sad return ":-(" elsif @mood == :happy return ":-)" # Add other moods here end # The default mood ":-|" end end class Blurbalizer def initialize(title) @title = title @blurbs = [] end def add_a_blurb(mood, content) @blurbs << Blurb.new(mood, content) end def show_timeline puts "Blurbalizer: #{@title} has #{@blurbs.count} Blurbs" @blurbs.sort_by { |t| t.time }.reverse.each { |t| puts "#{t.content.ljust(40)} #{t.time}" } end end myapp.show_timeline
Ruby
복사

II. 활용

array index 접근
class ParkingSystem def initialize(big, medium, small) @parking_slot = [0, big, medium, small] end def add_car(car_type) if @parking_slot[car_type] <= 0 return false else @parking_slot[car_type] -= 1 return true end end end
Ruby
복사
해시 접근
class ParkingSystem def initialize(big, medium, small) @capacity = { 1 => big, 2 => medium, 3 => small } @current = { 1 => 0, 2 => 0, 3 => 0, } end def add_car(car_type) return false if @current[car_type] == @capacity[car_type] @current[car_type] += 1 true end end
Ruby
복사
케이스별 분기 접근
class ParkingSystem def initialize(big, medium, small) @big_limit = big @medium_limit = medium @small_limit = small @big_curr = 0 @medium_curr = 0 @small_curr = 0 end def add_car(car_type) if car_type == 1 if @big_curr == @big_limit return false else @big_curr += 1 end elsif car_type == 2 if @medium_curr == @medium_limit return false else @medium_curr += 1 end elsif car_type == 3 if @small_curr == @small_limit return false else @small_curr += 1 end end return true end end
Ruby
복사