Language/PYTHON

함수의 활용(2) 메모화 / 조기리턴 / 코드 이름 / 코드 유지보수

구일일구 2021. 10. 9. 17:32
반응형

재귀 함수의 문제가 있지만, 필요한 경우 재귀 함수를 활용해 코드를 간결하고 읽기 쉬워짐

어떻게 사용해야 코드가 빠르게 실행되도록 만들 수 있을까?


메모화

메모 : 딕셔너리를 사용해 한 번 계산한 값을 저장함 

딕셔너리에 값이 메모되어 있으면 처리를 수행하지 않고 곧바로 메모된 값을 돌려주면서 코드의 속도를 빠르게 만듦

메모화를 사용하면 실행 후 곧바로 결과를 출력할 정도로 속도가 빨라짐.

 


메모화

# 메모 변수 만들기
dictionary = {
    1: 1,
    2: 1
}

# 함수 선언하기
def fibonacci(n):
    if n in dictionary:
        #메모가 되어 있으면 메모된 값을 리턴
        return dictionary[n]
    else:
        #메모가 되어 있지 않으면 값을 구함
        output = fibonacci(n-1) + fibonacci(n-2)
        dictionary[n] = output
        return output

# 함수 호출
print("fibonacci(10): ", fibonacci(10))
print("fibonacci(20): ", fibonacci(20))
print("fibonacci(30): ", fibonacci(30))
print("fibonacci(40): ", fibonacci(40))
print("fibonacci(50): ", fibonacci(50))

</>
fibonacci(10):  55
fibonacci(20):  6765
fibonacci(30):  832040
fibonacci(40):  102334155
fibonacci(50):  12586269025

 


조기 리턴

리턴을 중간에 사용하는 형태

과거: 함수 흐름의 끝에 리턴을 적기 위해 if else 조건문을 만들고 각각의 마지막 부분에서 리턴하도록 함

# 함수 선언
def fibonacci(n):
    if n in dictionary:
        # 메모되어 있으면 메모된 값을 리턴
        return dictionary[n]
    else:
        # 메모되어 있지 않으면 값을 구함
        output = fibonacci(n-1) + fibonacci(n-2)
        dictionary[n] = output
        return output

하지만 조기 리턴을 사용하면, 들여쓰기 단계가 줄기 때문에 코드를 더 쉽게 읽을 수 있음.

조기 리턴 : 흐름 중간에 return 키워드를 사용하는 것

 


조기 리턴 사용

# 함수 선언
def fibonacci(n):
    if n in dictionary:
        # 메모되어 있으면 메모된 값을 리턴
        return dictionary[n]
    # 메모되어 있지 않으면 값을 구함
    output = fibonacci(n-1) + fibonacci(n-2)
    dictionary[n] = output
    return output

 


좀 더 알아보기 (1) 코드에 이름 붙이기

더보기

* 가독성이 좋은 코드는 쉽게 읽을 수 있다는 의미

 

* 설명 없는 코드 <<< 주석이 있는 코드 : 코드의 내용을 분석하지 않아도 어떤 내용인지 쉽게 이해 가능

* 그러나 주석을 남발해서는 안됨

* 주석을 많이 사용한다 != 주석을 잘 사용한다

* 더 좋은 형태는 함수를 만들어 사용하는 것 ➡️ 코드에 이름을 붙이면 더 쉽게 읽힘

* 주석이 전혀 없는 데도 코드만 읽고 무엇을 하는 코드인지 쉽게 알 수 있음

 

좀 더 알아보기 (2) 코드 유지보수

더보기

* 코드를 유지하고 보수할 때, 변수나 함수를 사용하면 훨씬 쉬워짐

 

변수 예) 3.14 를 숫자로 입력 ➡️ 3.14를 PI라는 변수로 설정한 상태

-- 숫자를 하나하나 찾아서 변경하거나 전체 수정을 해야 하지 않고, pi변수의 설정값만 변경하면 됨!

함수 예) 그냥 print 안에 글을 넣음 ➡️ 함수로 작성

-- 'print 안의 글자를 변경해주세요' 라는 요청에 함수만 변경하면 쉬워짐, 요청 사항 등이 있을 때 이를 쉽게 반영할 수 있음

반응형