๐์ ๊ณ ๊ฒฝํ ์์ด ์์ง๋์ด๊ฐ ๋ ์ ๋ ์ธ ๊ฐ์ง ์ผ์ ํด์ ์ ๋ง ์ข์๋ค๊ณ ์๊ฐํฉ๋๋ค.๐
์๋ ํ์ธ์!!์ ๋ ์ฃผ์ํ์ฌ ๋ฆฌํ๋ฆฌ์ฝ์ ์์ง๋์ด ํ์ฟ ์๋ง์ ๋๋ค!์ด ๊ธ์ ใLITALICO Advent Calendar 2021ใ 20์ผ์งธ ๊ธ์ ๋๋ค!๐ฅ
[๋ด์ค ์ฃผ์ ]
์ค๋ฌผ์ฌ์ฏ ์ด์ ์์ง๋์ด๊ฐ ๋ ๊ฒฝํ์ด ์๋ ์ ๊ฐ ์ธ ๊ฐ์ง ์ผ์ ํ ๊ฒ ๋๋ฌด ์ข์์ด์.
ใ๋ชฉ๋กใ
1. ์ ์
2. WEB ์์ง๋์ด์ ๊ธฐ์ด ์ง์ ๋ฐฐ์ฐ๊ธฐ
3. ์๋ จ์ ๋ฐํ์ผ๋ก ํ๋'์ฌ๊ณ ๋ฐฉ์'
4. ์ด์จ๋ ๊ฐ๋ฐ๋์ ๋๋ ค์ผ ํ๋ค
5. ์์ฝ
1. ์ ์
์์ ์ ๊ฒฝ๋ ฅ
์์ ์ ๊ฒฝํ์ผ๋ก์ ๋์ถฉ ์ด๋ฐ ๋๋์ผ ๊ฑฐ์์.
์๊ธฐ๊ฐ ๋ถ๋ฆฌํ๋ค๊ณ ์ฌ๊ธฐ๋ค
๋์ ๊ฒฝ์ฐ ์ค๋ฌผ์ฌ์ฏ ์ด ๋ ์ ๊ณ ๊ฒฝํ์ด ์์๊ณ ๋ฌธ๊ณผ๋ผ๋ ์๋นํ ๋ถ๋ฆฌํ ์ํฉ์์ ์์ง๋์ด๊ฐ ๋์๋ค.๋ด ๋๋๋ ์ ์์ด๋ค๋ณด๋ค ์๋นํ ๊ธฐ๋์ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋ฑ๊ฐ์ ๋๋ ๋๋ ๋ง๋ค.
ํ์ง๋ง ๊ณ ๋ฏผ๋ ์ด์ฉ ์ ์๋ค. ์์ง๋์ด๋ก์์ ๊ธฐ์ ์ ๋ค์๋๋ง ์ฐ๋งํด ์์ฅ ๊ฐ์น๋ฅผ ๋์ด๊ณ ์ถ๋ค."์ฃผ์ ์ฌ๋๋ค์ด ๋ฌด์จ ๋ง์ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ด์...๐ญใ"์ฝ๋๋ฅผ ์ ํ ์ธ ์ค ๋ชฐ๋ผ์.""์ด? ๋์์ธ์ด์?"์ด๋ฐ ์์ฌ์์์ ๋ฒ์ด๋๊ธฐ ์ํด ์ ๊ฐ ํ๋ ์ผ์ ์๊ฐํ๊ฒ ์ต๋๋ค.w
2-WEB ์์ง๋์ด์ ๊ธฐ์ด ํ์ต
WEB ์์ง๋์ด๋ก์์ ๊ธฐ๋ณธ ์ง์์?
๋ค์ ์ธ ๊ฐ์ง๋ WEB ์์ง๋์ด๋ก์์ ๊ธฐ์ด ์ง์์ผ๋ก ์ ์๋ฉ๋๋ค.
์ฝํ ๋ํด์ ์ด ์ฑ ์์ ๋ชจ๋ ์ ์ ์๋ ์น ๊ธฐ์ ์ ๊ธฐ๋ณธ
์ฑ ์ ๋ชฉ์ฒ๋ผ WEB ๊ธฐ์ ์ ๊ธฐ๋ณธ์ ๋ํด์ ์ธํธ๋ก ํด์ค๋๋ค.์ด ์ฑ ์ ์ฝ๊ณ ์๊ธฐ ์ฌ์ด ์ค๋ช ๊ณผ ๋ํด๋ก ํผ์ณ์ง๊ณ , ๋จธ๋ฆฌ๋ก ์์ํ๋ฉด์ ์ฝ๋ ๊ฒ์ด ํน์ง์ด๋ค.๋คํธ์ํฌ/์์คํ ์ ๊ธฐ๋ณธ ์ค๊ณ/์์ ๊ด๋ จ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ์ฌ ๊ณต๋ถํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ํ ์ต์ํ์ ์ง์์ ์ ๋ ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฝ๋ ์ฝ๊ธฐ
๋ฌด์์ ๋ฐฐ์ธ ์ ์๋์ง ๋์ฒด์ ์ผ๋ก ์ค๋ช ํ์๋ฉด, ์๋์ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ด ๋จผ์ ๋ณดํธ์ (return ๋ฐํ)์ ์ฌ์ฉํ๋ฉด ๋ผ์ ๋ฃ๋ ๊ฒ์ ์๊ฒ ํ ์ ์๊ณ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด์๋ ์ด๋ฐ ๊ธฐ๊ต๊ฐ ํ์ํ๋ค.
judge_discounted_price.rb
# ใใใใฅใใ
def judge_discounted_price(person, price)
if person[:member] == 1
price = if person[:times] == 1
price * 0.9 - 1000
else
price * 0.9
end
else
price
end
end
# ใใใใใใ
def judge_discounted_price(person, price)
return price if person[:member] != 1
if person[:times] == 1
price * 0.9 - 1000
else
price * 0.9
end
end
๋์์ ์ํ ์ค๊ณ ์ค์ฒ ์ง์นจ ์ด ์ฑ ์ ๋งค์ฐ ๋๊บผ์์ ๋๋ ๋๊ธฐ w๋ผ๊ณ ํต์นญํ๋ค
๊ทธ๋ ๋ค๋ฉด ๋์์ ํฅํ ์๊ฐ์ ์์คํ ๊ตฌ์ฑ์ ์๊ฐ์ ๊ฐ๋ฆฌํจ๋ค.์์ธํ ์ํฉ์ ์๊ณ ์ถ์ ์ฌ๋์ ์๋์ ๋ณด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
โ ์ด๋ณด์๋ฅผ ์ํ ์ฒ ์ ํ ํด์ค!๋ฌด์์ด ๋์์ ํฅํ ๊ฒ์ ๋๊น?
์ด ์ฑ ์ ์ฝ๋ ์ด์ ๋ ๋ ๊ฐ์ง๋ค.
์์ง๋์ด์ ํต์ฉ์ด๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ํด
๋์์ ์ํ ์ฌ์ฌ์ฉ ๋์์ธ ๋ชจ๋ธ
๋ฐฐ์ฐ๋ค๋์์ ๋์์ผ๋ก ํ๋ ์ธ์ด์์ ๋์์ธ์ ๋ชฉ๋ก๊ณผ ์ ์ฌํ ์ธ์์ ๊ฐ์ง๊ณ ์๋ค.
์ข ์ดํด๊ฐ ์ ๊ฐ๋ ๊ฒ ๊ฐ์์ ๋ฐ์ฝ๋ ์ดํฐ ๋ชจ๋๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค.
Decorator.rb
# Decoratorใใฟใผใณใไฝฟ็จใใชใไพ
class User < ApplicationRecord
def name_with_prefix
prefix = gender == '็ทๆง' ? 'Mr.' : 'Ms.'
name + prefix
end
end
# Decoratorใใฟใผใณใไฝฟ็จใใไพ
class User < ApplicationRecord
end
class UserDecorator
attr_reader :user
def initialize(user)
@user = user
end
def name_with_prefix
prefix = @user.gender == '็ทๆง' ? 'Mr.' : 'Ms.'
name + prefix
end
end
Decorator ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ User ๋ชจ๋ธ์ ๋ฎ์ด์ฐ๊ธฐ ๋ฐ ์ ์ฅ์ด ๋ชจ๋ ์ํ๋ ์ํ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.๊ทธ ๊ฒฐ๊ณผ ์ดํ ๋ค์ํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ค.์๋ฅผ ๋ค์ด ๋์์ ๋์์ผ๋ก ํ๋ ๋ชฉ๋ก์ ์ ์ฐํ๊ฒ ํ์ฉํ๊ธฐ ์ํ ๊ฒ ๊ฐ์ ๊ฒ๋ค์ ๋ง์ด ์๊ฐํ๋ค.๊ทธ๋์ ์ด ์ฑ ์ ๋์์ ํฅํ ๋๋์ ์ฐ๋งํ๊ธฐ์ ๊ฐ์ฅ ์ ํฉํ ์ฑ ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ ๋๊ฐ๋๋ฅผ ํตํด 26๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋ณผ ์ ์๋ค
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ก'ํ๋ก๊ทธ๋จ๊ณผ ๊ณ์ฐ ๋ฐฉ๋ฒ'์ด๋ค.
์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ฌด์์ ๋๊น?
๊ณ์ฐ๋ฒ์ด๋ผ๋ ์ด๋ฆ์ด ์ ๋ง ๋๋จํ๋ค์...
๊ทธ๋ฌ๋ ์ด ์ฑ ์ ์์กฐ, ์ฐฝ๊ณ ๋ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ถํฐ ์ ๋ ฌ, ํ์ ๋ฐฉ๋ฒ ๋ฑ์ ๋ํด๋ก ์ค๋ช ํ๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ธฐ์ ์ ๋ณด์ญ์์ค.
๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก์ ์ ํ ํ์๊ณผ ์ด๋ถ ํ์์ด ์๋ค.๊ธฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ดํด์๋ ์ ํ ๊ฒ์์ด ๋น๊ต์ ๊ฐ๋จํ์ง๋ง, ์ผ์นํ๋ ์ซ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ณ์ฐ๋์ด ๋ง์์ง๋ค.
๊ทธ๋ฌ๋ ์ด๋ถํ์๊ณผ ๊ฐ์ ์ฐพ๊ธฐ ๋ฐฉ๋ฒ์ด๋ผ๋ฉด ์ ๋ถ๋ฅผ ๋น๊ตํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ํ ํ์๋ณด๋ค ๊ณ์ฐ๋์ด ์ ๋ค.๋๋ ์ด๋ฌํ ์ ์ฐจ์ ๊ณ์ฐ ๋ฐฉ๋ฒ์ ๊ธฐ์ด ์ง์์ผ๋ก ํ์ ํ๋ ๊ฒ์ด ์์ง๋์ด๋ก์ ๋งค์ฐ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค.
binary_search.rb
# ็ทๅฝขๆข็ดข
def linear_search(array, target)
array.each.with_index(1) do |num, index|
if num == target
puts "ๆขใใฆใใๅคใฏ#{index}็ช็ฎใซใใใพใ"
return
end
end
puts "#{target}ใฏ่ฆใคใใใพใใใงใใ"
end
array = [14, 32, 45, 67, 89, 122, 245, 367]
puts 'ๆข็ดขใใใๅคใไปฅไธใใ้ธใใงใๅ
ฅๅใใฆใใ ใใ'
puts array.join(' , ')
target = gets.to_i
linear_search(array, target)
# ไบๅๆข็ดข
def binary_search(array, target)
head = 0
tail = array.length - 1
while head <= tail
center = (head + tail) / 2
if array[center] == target
puts "#{target}ใฏ#{center + 1}็ช็ฎใซใใใพใใ"
return
elsif array[center] < target
head = center + 1
else
tail = center - 1
end
end
end
array = [14, 32, 45, 67, 89, 122, 245, 367]
puts 'ๆข็ดขใใใๅคใไปฅไธใใ้ธใใงใๅ
ฅๅใใฆใใ ใใ'
puts array.join(' , ')
target = gets.to_i
binary_search(array, target)
์ด์์ ๋ด๊ฐ ์ฝ์ ์ฑ
์ด๋ค.3. ์ฐ๋ง๋ฅผ ๋ฐํ์ผ๋ก ํ๋'์ฌ๊ณ ๋ฐฉ์'
๋์์ ๋ต์ ์ฐพ๋ ๊ฒ๋ ์๋ฏธ๊ฐ ์๋ค.
๋จ์ํ ์ ๋ต๊ณผ ์ต์ข ์ฑ๊ณผ๋ง์ ์ถ๊ตฌํ๋ค๋ฉด ๋จ๊ธฐ์ ์ผ๋ก๋ ์ข์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ข์ง ์๋ค๊ณ ๋ณธ๋ค.๊ธฐ์ด๊ฐ ๋๋'์์ง๋์ด๋ก์์ ์ฌ๊ณ ๋ฐฉ์'์ด๋ผ๋ ๋ถ๋ถ์์ ๋ ์ ๊ตํด์ง๋ ค๋ฉด ์ด๋ค ์๋ฆฌ์์๋ ์๋ ฅ๊ฐฑ์์ ์ผ๋ก ์ฌ๊ณ ํ๊ณ ๋๊น์ง ํด๋ผ ์ ์๋ ๋ฅ๋ ฅ์ด ์๋ค๊ณ ์๊ฐํ๋ค.์ฅ๊ธฐ์ ์ผ๋ก ๋ณด๋ฉด, ๋๋ ์ด๋ฐ ํ์ ๋ฐฉ์์ด ์ข์ ์ ์ด ์๋ค๊ณ ์๊ฐํ๋ค.
ํ์ ํ๊ธฐ ์ํด ๊นจ๋ซ๋ ์ผ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
๋ค๋ฅธ ์์ง๋์ด์ ์ค์น, ์ค๊ณ ๋ฐฐ๊ฒฝ๊ณผ ์ด์ ๋ฅผ ๋ฐ๋์ ๋ฌผ์ด์ผ ํ๋ค.
๋ถ์ ์ ์์ ์ ๊ธฐ์ ์ ํ์ฅํ๊ณ ๊ฒฝํ์ ๋๋ฆฌ๋ ๋๊ตฌ์ด๋ค
์ด๊ฒ์ ๋์ ์์ ํ ์ผ๊ด๋ ์ฃผ์ฅ์ธ๋ฐ, ๊ฒฐ๊ณผ๋'๊ฒฝํ์ ์'์ด๋ค.ร๋๋ FB์ ์์ด ์ฃผ์ ์ฌ๋๋ค๊ณผ ์ฐจ์ด๊ฐ ์๋์ง ๊ณ ๋ คํ๊ณ ์๋ค.๋๋ ์ค๋ฌผ์ฌ์ฏ ์ด ๋ ์์ง๋์ด๊ฐ ๋๊ณ ํน๋ณํ ์์ง๋์ด๋ก์์ ๋๋์ด ์์ด์ ์ฃผ์๋ณด๋ค ๋ช ๋ฐฐ๋ ๋น ๋ฅธ ์๋๋ก ๊ฒฝํ์ ์๊ณ ์ถ์๋ค.
๊ทธ๋์ ๋๋ ๋ถ์ ๊ฐ๋ฐ์ ํตํด ๋ฅ๋ ฅ์ ์ฅ์ ํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
<< ์ถ๋ ฅ ์ ๋ ฅ
์ ๋ ฅ์ด ๋์ ํธ์ ์๋๋ค.ํ์ง๋ง ๊ฒฐ๊ตญ ํ์ฅ ์ค์ ์๊ฐ ๋ง์์๋ก ๊ฐ๋ ฅํ ์์ง๋์ด๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค."์ค์ ์์ ์ง์์ด ๋ถ์กฑํ๋ฉด ๊ฑฐ๊ธฐ์ ์ ๋ ฅํ์ผ๋ฉด ์ข๊ฒ ๋ค"๋ฉฐ ์์ถ ํ๊ฒฝ์ ์ด๋ป๊ฒ ๋๋ฆฌ๋๋์ ์ด์ ์ ๋ง์ท๋ค.
5 - ์์ฝ
์ทจํฉ์ ๋ค์ด๊ฐ๋ค.์์ ์ด ์์ง๋์ด๊ฐ ๋ ๊ฒฝํ์ด ์๋ค๊ณ ์๊ฐํ๋ ์ธ ๊ฐ์ง ์ ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ด์ผ์ @kazuis์จ์ 5๋จ๊ณ ๋ชจ๋ธ์ ์์คํ ์ค๊ณ ์ถ์ง ๋ฐฉ๋ฒ์ ๋๋ค!
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐์ ๊ณ ๊ฒฝํ ์์ด ์์ง๋์ด๊ฐ ๋ ์ ๋ ์ธ ๊ฐ์ง ์ผ์ ํด์ ์ ๋ง ์ข์๋ค๊ณ ์๊ฐํฉ๋๋ค.๐), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://qiita.com/Junichi_fukushima/items/b625322ea96b5a921f7eํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค