함수추출의 원리(Extract Method)

이효균·2021년 5월 2일

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!

profile
저의 고민, 설계 과정이 담긴 벨로그에 방문해주셔서 감사드립니다!

0개의 댓글