파이썬은 모든 것이 객체입니다.
그만큼 객체의 비중은 엄청나며 클래스와 같은 개념을 이해하기 위해서 반드시 알아야 하는 개념입니다.
그렇다면 이제부터 파이썬의 객체와 객체의 알 듯 말 듯 한 스페셜 메서드에 대해 알아보도록 하겠습니다.
객체란?
데이터와 메서드의 모음.
객체에 대한 수많은 정의가 존재하지만 개인적으로 내린 객체의 정의는 위와 같습니다.
사실 일상의 모든 물체는 객체라고 할 수 있습니다.
예를 들어 자동차는 연료의 양, 여분의 타이어 존재 유무와 같은 데이터 그리고 전진, 후진, 멈춤 등의 메서드로 구성된다고 볼 수 있습니다.
arr = [1, 2, 3, 4]
arr.append(10) # append 함수는 리스트의 메서드입니다
print(arr) # [1, 2, 3, 4, 10]
이와 마찬가지로 파이썬의 모든 것은 객체입니다.
리스트 자료형 또한 객체로 데이터와 메서드로 이루어져 있습니다.
객체들은 인스턴스화(instantiation)를 통해 생성되며 마침표(.)를 사용해서 각 데이터와 메서드에 접근할 수 있습니다.
조금 더 구체적으로 살펴보겠습니다.
모든 객체는 각각의 목적을 가지고 있습니다.
따라서 객체는 각각의 목적을 수행하기 위한 서로 다른 데이터와 메서드를 가질 수 밖에 없습니다.
리스트 자료형은 append 메서드를 가지고 있지만 딕셔너리 자료형은 그렇지 않습니다.
반면에 딕셔너리 자료형은 get 메서드를 가지고 있지만 리스트 자료형은 그렇지 않습니다.
이처럼 객체는 저마다의 특성과 함수를 가집니다.
스페셜 메서드
a, b = 4, 2
print(a - b, a.__sub__(b)) # 2 2
print(a * b, a.__mul__(b)) # 8 8
print(a ** b, a.__pow__(b)) # 16 16
print(a / b, a.__truediv__(b)) # 2.0 2.0
print(a // b, a.__floordiv__(b)) # 2 2
print(a % b, a.__mod__(b)) # 0 0
매직 메서드 라고도 부르는 스페셜 메서드는 객체들의 공통된 인터페이스입니다.
안타깝게도 코드를 작성하는 입장에서는 스페셜 메서드를 직접 사용할 일이 없습니다.
대신에 우리가 작성한 코드를 이해하기 위해 파이썬 인터프리터가 사용합니다.
위 예제 코드에서 볼 수 있듯이 두 수를 빼기 위해 '-' 기호를 사용해 연산을 수행합니다.
하지만 파이썬 인터프리터는 내부적으로 변환 과정을 거쳐 이를 '__sub__' 함수로 재해석 합니다.
이처럼 스페셜 메서드는 쉽고 직관적인 코드를 작성할 수 있도록 돕는 역할을 합니다.
a, b = 5, 8
print(a + b, a * b) # 13 40
arr1, arr2 = [1, 2, 3], [4, 5, 6]
print(arr1 + arr2) # [1, 2, 3, 4, 5, 6]
print(arr1 * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
위 예제 코드는 숫자와 리스트 데이터에 대해 덧셈과 곱셈 연산을 수행합니다.
코드가 실행될 때 숫자와 리스트 데이터에 사용된 '+' 기호는 모두 '__add__' 함수로 변환됩니다.
하지만 이때 __add__ 함수에 대해 놓치면 안되는 점이 하나 있습니다.
바로 각 경우의 스페셜 메서드명이 동일하다고 하더라도 객체의 타입에 따라 다르게 동작한다는 점입니다.
전자도 a.__add__(b), 후자도 arr1.__add__(arr2)와 같은 형태를 보입니다.
하지만 하나는 두 수를 더하는 동작을, 나머지 하나는 리스트를 연결하는 동작을 수행합니다.
'*' 기호의 경우도 마찬가지입니다.
넘파이 라이브러리의 객체를 사용할 때 바탕이 되는 핵심 개념이기 때문에 이에 대해 숙지하고 있어야 할 필요성이 느껴집니다.
'파이썬・ML' 카테고리의 다른 글
파이썬 Folium으로 지도 시각화하기 (0) | 2023.07.04 |
---|---|
파이썬 random 모듈 사용하기 (0) | 2023.06.14 |
파이썬 itertools 모듈로 순열/조합/중복순열/중복조합 구하기 (0) | 2023.06.02 |
파이썬 숫자 판별하는 문자열 함수(isdecimal, isdigit, isnumeric) (0) | 2023.06.01 |
파이썬 datetime 모듈 사용해서 요일 알아내기 (0) | 2023.06.01 |