파이썬(Python) - 매직(Special)메소드 설명
안녕하세요. 좋은사람 입니다.
오랜만에 파이썬 문법에 관해서 포스팅 해보려고 합니다.
그 중에서 가장 빈번하게 사용되고 있지만, 정확한 문법 개념을 가지고 접근해야 하는 매직 메소드에 대해서
간단하게 설명해 볼까 합니다.
매직 메소드(Special Method)는 파이썬 전반적인 아키텍처를 담고 있다고 봐도 무방할 정도로 중요한 개념
이라고 볼 수 있습니다.
아울러, 매직 메소드(Special Method)는 파이썬 인터프리터를 통한 코드 실행에 있어서 전체에 걸쳐서
이미 구성되어 있는 메소드라고 설명되고 있습니다.
매직메소드를 정확하게 오버라이딩해서 사용하게 되면 파이써닉 기준에 부합하는 더욱 유연하고 생산성이
있는 코드를 작성하실 수 있다고 생각합니다.
아울러, 파이썬 심화 과정으로 나가기 위해서는 필수적으로 관련 지식을 읽어보시는 것을 추천드려요.
그럼 하단에서 간단한 예제를 통해서 설명드리겠습니다.
지난 파이썬 관련 포스팅은 오른쪽 링크를 참고하세요. - 관련 포스팅
파이썬(Python) - 매직(Special) 메소드 예제 실습
매직메소드는 우리가 계속 사용하고 있는 메소드 입니다. 파이썬 문법에 있어서 객체는 데이터에 대한
추상화하는 과정이라고 이해해볼 수 있습니다.
즉, 코드상에 존재하는 (변수, 함수, 클래스) 등을 모두 객체로써 핸들링 할 수 있고 느슨하게 구성되어 있는
매직 메소드를 추가함으로써 우리가 의도하는 기능을 구현할 수 있는 것입니다.
매직 메소드 관련 추천 레퍼런스 - 참조
1. __init__, __str__, __iter__ ...
위 제목에 나와 있는 더블 언더스코어("__")로 메소드 이름 앞 뒤에 붙여주면 해당 메소드를 오버라이딩 해서
사용하실 수 있습니다. 이미 우리는 의식하지는 못했지만, 기본적으로 덧셈, 뺄셈 등에도 해당 메소드를
내부적으로 백그라운드 연산을 통해 사용하고 있었던 셈입니다.
더블 언더스코어 된 메소드가 파이썬 내부(Built-in)에 존재하는 함수라면 그 즉시 메소드 오버라이딩을 통해서
함수 본연의 기능을 내가 원하는 객체에 부여할 수 있다는 뜻입니다.
조금 생소하시고 어렵다고 느껴지시면 아래 예제를 확인하시면 쉽게 이해가능하실거예요.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# 매직메소드 기초
# 기본형
print(int)
# 모든 속성 및 메소드 출력
print(dir(int))
print()
print()
n = 100
# 사용
print('EX1-1 -', n + 200)
print('EX1-2 -', n.__add__(500))
print('EX1-3 -', n.__doc__)
print('EX1-4 -', n.__bool__())
print('EX1-5 -', n.__mul__(100))
print()
print()
# 클래스 예제1
class Student:
def __init__(self, name, height):
self._name = name
self._height = height
def __str__(self):
return 'Student Class Info : {} , {}'.format(self._name, self._height)
def __ge__(self, x):
print('Called. >> __ge__ Method.')
if self._height >= x._height:
return True
else:
return False
def __le__(self, x):
print('Called. >> __le__ Method.')
if self._height <= x._height:
return True
else:
return False
def __sub__(self, x):
print('Called. >> __sub__ Method.')
return self._height - x._height
# 인스턴스 생성
s1 = Student('James', 181)
s2 = Student('Mie', 165)
# 매직메소드 출력
print('EX2-1 -', s1 >= s2)
print('EX2-2 -', s1 <= s2)
print('EX2-3 -', s1 - s2)
print('EX2-4 -', s2 - s1)
print('EX2-5 -', s1)
print('EX2-6 -', s2)
print()
print()
|
cs |
7번 라인 : dir 함수를 통해서 int 객체가 가지고 있는 모든 속성 출력
14번 라인 : 기본적인 덧셈 연산
15번 라인 : 내부적으로 __add__
메소드가 실행되어 덧셈 결과를 반환
16번 라인 : 18번 라인까지 문서 주석 , 참 거짓 반환 , 곱하기
테스트 실행
25번 라인 : 학생 클래스 선언 -> __ge__ , __le__ , __sub__
매직메소드 오버라이딩에 주목!
52번 라인 : 53번 라인까지 2명의 학생 인스턴스(Instance) 생성
56번 라인~ : 이제 학생 인스턴스를 사용해서 숫자 연산자를 활용해서 계산 및 비교 수행 가능
이번 예제의 핵심이라고 볼 수 있습니다. 즉, 학생 인스턴스를 비교할 경우 내부적으로 오버라이딩한 메소드가
직접 수행이 되어 클래스 내부에 우리가 의도한 학생의 키(Height)를 기준으로 연산이 수행되는 것이지요.
즉, 객체에 추가한 메소드의 기본 기능대로 코드에서 생성된 인스턴스를 유연하게 사용 할 수 있습니다.
2. 코드 실행 확인
정확하게 소스를 이해하시고 직접 실행
실행 해보시기를 권장해 드립니다.
실행 화면
더 많은 메소드 레퍼런스 확인 및 자세한 설명은 -> 클릭
마무리
단순한 예제지만, 파이썬에서 모든 데이터들은 객체 및 객체 사이의 관계로 표현
될 수 있는 부분을 보여줄 수
있는 내용이라고 생각합니다.
즉, 파이썬 인터프리터를 통해서 해석 후 데이터 객체 생성 및 연산을 통해서 우리가 원하는 출력 값 및
프로그램 개발 흐름을 제어 할 수 있다는 것이지요.
시간이 여유가 되신다면 더블 언더스코어를 지원하는 모든 메소드를 한 번 찾아보시는 것도 파이썬
실력향상에 아주 큰 도움이 되실거라 생각됩니다.
다음 포스팅에서도 좋은 내용으로 찾아뵙겠습니다. 감사합니다.
소스코드 다운로드 :
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - Redis + RQ(Redis Queue) Task 연동 비동기 예제 소스 (1) | 2020.04.03 |
---|---|
파이썬(Python) - 네임드튜플(namedtuple) 사용 예제 및 소스코드 (3) | 2019.08.18 |
파이썬(Python) - 템플릿 메소드(Template Method) 패턴(디자인패턴) (0) | 2019.03.06 |
파이썬(Python) - 팩토리 메소드(Factory Method) 패턴(디자인패턴) (0) | 2019.02.25 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(2) - env 명령어 (2) | 2019.01.26 |