함수추출의 원리(Extract Method)

Hyo Kyun Lee·2021년 5월 2일
0

Python

목록 보기
4/26

1. 개념

  • 리팩토링
    코드의 가독성을 높여 개발자간 협업을 원활하게 해주도록 하는 과정

  • 구하고자 하는 결과 / 구현하고자 하는 목적
    ▶어떤 값, 기능을 구하고자 하는지 잘 파악해야 한다.
    ▶구하고자 하는 값에 사용되는 변하지 않는 변수들이 매개변수가 된다.
    ▶같은 로직이더라도 최종적으로 반환하는 값을 기준으로 함수추출, 매개변수생성.
    ▶함수내부에서 값이 변화하면 지역변수로 활용되어 매개변수가 되지 않는다.

2. 코드

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

3-1. 참조링크

https://www.jetbrains.com/help/pycharm/extract-method.html#examples

4. 리팩토링관련 참조개념

  • 기능(함수) 나누기
    ▶ 하나의 함수에는 하나의 기능만 작동하도록!

  • 임시변수제거(변수 인라인화)
    ▶ 한번 대입후 사용되지 않는 변수
    ▶ 함수화하거나, 함수화한 채로 매개변수화

  • 추상화
    ▶ 로직의 목적/기능을 최대한 추상화한다
    ▶ 같은 목적/기능의 로직은 구하고자 하는 결과가 같기 때문에 함수추출이 가능

4. remind

코드에 대한 이해가 우선이다. Not sugar syntax But sugar logic!

0개의 댓글