five lines of code 책을 읽으며 리팩토링을 공부하던 중 과거 공부했던 프로그래밍 3대 원칙을 되새김질하며 다시 한번 체득하고자 한다.
코드를 중복해서 작성하지 말자
가끔 프로젝트를 수행할 때 시간에 쫓겨 기존에 있던 코드를 활용하지 않고 작성하는 경우, 레거시 코드와 혼용하여 작성하는 경우 코드가 중복되어 작성될 수 있다.
예를 들어,
# api/v1/sessions_controller.rb
class SessionsController < V1::BaseController
def signin
user = User.find_by(email: params[:email])
if user.validate_password?(params[:password])
sign_in user
...
end
end
# api/v2/sessions_controller.rb
class SessionsController < V2::BaseController
def signin
user = User.find_by(email: params[:email])
if user.validate_password?(params[:password])
sign_in user
...
end
end
만약 유저 로그인 시 패스워드가 5회 이상 틀릴 시 락을 거는 기능을 추가한다면 v1 과 v2 컨트롤러 모두 수정이 필요하다. 만약 signin
메서드에 들어가있는 로그인 기능을 별도의 모듈로 이전하여 작성한 후 include
한다면 해당 모듈에서만 수정하면 되므로 유지보수가 쉬워질 것이다.
코드는 최대한 간결하고 누구나 알아볼 수 있도록 작성해야한다.
def replace(str, char1, char2):
result = ''
for c in str:
if c == char1:
result += char2
else:
result += c
return result
# 안에 if 문을 빼서 함수를 쪼개보자
def replace(str, char1, char2):
result = ''
for c in str:
result += select_char(c, char1, char2)
return result
def select_char(c, comp, rep):
if c == comp:
return rep
return c
지금 필요없는 기능은 만들지 말자. 추후 필요할 때 만들면 된다.
five lines of code 에서는 리팩토링에 대하여 방법론을 제시한다. 앞으로 이 책을 기반으로 깨진창문을 찾아 고치고 어떻게 해결하였는지 꾸준히 작성해보자!