티스토리 뷰

1. 클로저란?

- 함수 안에 있는 변수를 기억하고 계속 사용하고 싶을때 사용(상태 저장)

- 함수안에 변수와 또 다른 함수를 만들어서 사용한다

- 바깥 함수의 변수는 안쪽 함수에서만 사용할 수 있어 외부에서 함부로 변경할 수 없다

- 코드를 깔끔하게 적을 수 있고, 중요한 데이터나 계산을 숨길 수 있어 안전하다.

- 데이터를 저장하거나 버튼 클릭수를 세는데 사용

def outer(m):
    def inner(n):
        return m*n
    return inner

outer3 = outer(3) # inner가 3을 저장함
outer3(4) # 12
outer3(5) # 15
outer3(6) # 18

- nonlocal : 바깥 변수를 수정할때 사용

def button():
    i = 0
    def count():
        nonlocal i
        i += 1
        return i 
    return count

button_counter = button()
button_counter() # 1 
button_counter() # 2
button_counter() # 3

 

2. 클래스를 사용하면 되지 않나?

- 클로저의 경우 더 짧고 간결하며, 캡슐화가 더 강력하다.

특징 클로저 클래스
코드의 간결 간단한 작업에 적합(짧고 간결) 더 많은 기능을 추가하기에 적합
상태 저장 함수 안의 변수를 기억하고 저장 인스턴스 변수로 상태 저장
재사용성 특정한 역할에 집중(필요한 함수만 반환) 여러 메서드와 속성을 가진 복잡한 객체 생성 가능
캡슐화(숨기기) 변수는 함수 안에 숨겨져 외부에서 완전 접근 불가 __를 사용해 이름을 변경하는 식으로 숨김

 

3. 데코레이터란?

- 함수에 다른 기능을 추가하는 것

- 기존 함수의 호출 방식을 바꾸지 않아도 기능을 확장할 수 있다.

- 함수마다 중복 코드가 발생할 필요가 없어 부가 기능과 본래 기능을 분리하고 각자의 역할이 명확해진다.

- @기호로 간단하게 추가하여 코드가 간결해지고, 가독성과 유지보수성이 좋아진다.

import time

def 실행_시간_측정(func):
    def wrapper(*args, **kwargs):
        시작 = time.time()
        결과 = func(*args, **kwargs)
        끝 = time.time()
        print(f"{func.__name__} 실행 시간: {끝 - 시작:.4f}초")
        return 결과
    return wrapper

@실행_시간_측정
def 계산():
    time.sleep(1)
    print("계산 완료!")

계산()

# 계산 완료!
# 계산 실행 시간: 1.0000초

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함