
Python을 시작할 때 기본 문법에 대해서도 익숙하지 않았다..
자바 개발을 위주로 하다보니 대부분 타입 지정이 불필요한 부분과 배열 혹은 list의 크기를 지정하지 않아도 된다는 부분이 의문이었다.
심지어 get을 할 때 value값으로도 불러와진다? 이거 참 허..
왜 자바개발자들이 파이썬 싫어하는지 알 거 같다.
with이란 기능도 나한테 신선한 충격이었고 쓰레드를 적용할 때도 쉽게 asycio로 적용이 되는 걸 보고 놀랐다..
더 신기한건 파이썬 코드로 알고리즘 풀면 절반...으로 풀 수 있다
그 중 헷깔렸던 내용을 담는다
그건 Decorator와 Property였다
이게 뭐지? 하고 붙어있어서 확인을 했다.
데코레이터는 함수나 클래스를 수정하지 않고도 기능을 추가하거나 변경할 수 있는 강력한 메커니즘이다.
데코레이터는 다른 함수를 입력으로 받아 새로운 함수를 반환하는 함수로 다양하게 쓰인다..
def my_decorator(func):
def wrapper():
print("함수 실행 전")
func()
print("함수 실행 후")
return wrapper
@my_decorator
def say_hello():
print("안녕하세요!")
say_hello()
# 출력:
# 함수 실행 전
# 안녕하세요!
# 함수 실행 후
위 처럼 wrapper로 감싸서 실행을 시킬 수 있고 이걸 @에서 더 붙여서 사용할 수 있다!
위 코드를 보면 my_decoretor를 지정하고, 그 안에 함수를 넣어 감싸는 걸 볼 수 있다.
더 복잡하게 가보자
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"함수 {func.__name__}이 호출됨")
result = func(*args, **kwargs)
print(f"함수 {func.__name__}이 완료됨")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
print(add(3, 5))
# 출력:
# 함수 add이 호출됨
# 함수 add이 완료됨
# 8
위 처럼 감싸고 그 안에 있는 인자를 사용할 수도, 그 안에 name을 확인하여 호출할 수도 있따.
이렇게 보면 쉽죠? 처음 소장님 코드보고 기절할 뻔 했습니다 이게 뭔소린지.. 지피티도 금지당해서 이게 뭔 소리야.. 하고 계속 디버깅했죠
그럼 Property는 뭐냐?
프로퍼티는 객체의 속성에 대한 접근을 제어하고 계산된 속성을 만들 수 있게 해준다! 뭐.. impl에 method 추가한다 생각했는데 그 외에도 굉장히 다양한 기능을 할 수 있다. 마치.. entity에 기능 추가랄까?
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if not isinstance(value, str):
raise ValueError("이름은 문자열이어야 합니다")
self._name = value
@name.deleter
def name(self):
print("이름을 삭제합니다")
del self._name
# 사용 예시
p = Person("홍길동")
print(p.name) # 게터 사용
p.name = "이순신" # 세터 사용
del p.name # 딜리터 사용
기본 property 내용이다 보면 알겠지만 property를 통해 인자를 호출한다던가,, 수정한다던가, 삭제하는 등 CRUD 기능을 넣을 수 있다.
자바에서도 getter, setter를 만들어 사용하지않는가.. 비슷하다
또 계산식을 넣어 호출할 수도 있다.
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14 * self._radius ** 2
# 사용 예시
c = Circle(5)
print(c.radius) # 5
print(c.area) # 78.5
위 내용을 보면 area란 계산식을 만들어 self 인자를 통해 반환할 수 있죠? 아 쉽습니다 아주 좋아요 이거..
python은 자바처럼 new로 새로운 객체를 만든다 명시하지 않아도 필요 인자값만 넘기면 객체가 만들어지니 그 객체에 대한 값을 바탕으로 계산식을 미리 만들어서 쓸 수 있답니다!
개꿀기능이에요!