리팩토링
코드의 가독성을 높여 개발자간 협업을 원활하게 해주도록 하는 과정
구하고자 하는 결과 / 구현하고자 하는 목적
▶어떤 값, 기능을 구하고자 하는지 잘 파악해야 한다.
▶구하고자 하는 값에 사용되는 변하지 않는 변수들이 매개변수가 된다.
▶같은 로직이더라도 최종적으로 반환하는 값을 기준으로 함수추출, 매개변수생성.
▶함수내부에서 값이 변화하면 지역변수로 활용되어 매개변수가 되지 않는다.
Before refactoring
i = 0
while i < (len(array_memoization)):
if i == 0:
array_memoization[i] = 0
elif i == 1:
array_memoization[i] = 1
elif i == 2:
array_memoization[i] = 1
elif i == 3:
array_memoization[i] = 1
elif i == 4:
array_memoization[i] = 2
else:
array_memoization[i] = array_memoization[i - 5] + array_memoization[i - 1]
i = i + 1
result = array_memoization[N]
After refactoring (result부분 제외)
def Dynamic_programming(array_memoization):
i = 0
while i < (len(array_memoization)):
if i == 0:
array_memoization[i] = 0
elif i == 1:
array_memoization[i] = 1
elif i == 2:
array_memoization[i] = 1
elif i == 3:
array_memoization[i] = 1
elif i == 4:
array_memoization[i] = 2
else:
array_memoization[i] = array_memoization[i - 5] + array_memoization[i - 1]
i = i + 1
After refactoring #2 (result부분 포함)
def D(N, array_memoization):
i = 0
while i < (len(array_memoization)):
if i == 0:
array_memoization[i] = 0
elif i == 1:
array_memoization[i] = 1
elif i == 2:
array_memoization[i] = 1
elif i == 3:
array_memoization[i] = 1
elif i == 4:
array_memoization[i] = 2
else:
array_memoization[i] = array_memoization[i - 5] + array_memoization[i - 1]
i = i + 1
result = array_memoization[N]
return result
https://www.jetbrains.com/help/pycharm/extract-method.html#examples
기능(함수) 나누기
▶ 하나의 함수에는 하나의 기능만 작동하도록!
임시변수제거(변수 인라인화)
▶ 한번 대입후 사용되지 않는 변수
▶ 함수화하거나, 함수화한 채로 매개변수화
추상화
▶ 로직의 목적/기능을 최대한 추상화한다
▶ 같은 목적/기능의 로직은 구하고자 하는 결과
가 같기 때문에 함수추출이 가능
코드에 대한 이해가 우선이다. Not sugar syntax But sugar logic!