int1 = 5
int2 = 10
string1 = "우승자: "
string2 = "강영훈"
print(int1 + int2) # 15
print(string1 + string2) # 우승자: 강영훈
파이썬을 사용하다 보면 다양한 기능을 객체를 통해 만들고 사용하게 됩니다. 사실 파이썬은 모든 것이 객체로 이루어진 순수 객체 지향 언어입니다. 정수, 문자열, 리스트, 딕셔너리, 함수, 모듈까지 모두 객체이며, 특정 클래스의 인스턴스로 만들어져 있습니다.
파이썬의 모든 것은 객체다!
우리가 평소에 사용하던 기본적인 요소들도 모두 객체인지 확인해 볼까요?
import random
def print_hello():
print("안녕하세요!")
print(type(2)) # <class 'int'>
print(type("test")) # <class 'str'>
print(type([])) # <class 'list'>
print(type({})) # <class 'dict'>
print(type(print_hello)) # <class 'function'>
print(type(random)) # <class 'module'>
출력 결과를 보면 모든 요소가 특정 클래스의 인스턴스임을 알 수 있습니다.
- 2 → int 클래스의 인스턴스
- "test" → str 클래스의 인스턴스
- [] → list 클래스의 인스턴스
- {} → dict 클래스의 인스턴스
- print_hello (함수) → function 클래스의 인스턴스
- random (모듈) → module 클래스의 인스턴스
즉, 파이썬에서는 우리가 작성하는 모든 것이 객체이며, 새로운 기능도 객체로 만들어야만 합니다.
파이썬의 숨겨진 조력자: 스페셜 메소드
파이썬의 객체들은 .메소드()를 호출하는 일반적인 방식뿐만 아니라 연산자나 괄호를 이용해 사용할 수도 있습니다.
예를 들어, 숫자나 문자열을 더할 때 + 연산자를 사용하죠?
int1 = 5
int2 = 10
string1 = "우승자: "
string2 = "강영훈"
print(int1 + int2) # 15
print(string1 + string2) # 우승자: 강영훈
하지만 내부적으로는 아래와 같이 실행됩니다.
print(int1.__add__(int2)) # 15
print(string1.__add__(string2)) # 우승자: 강영훈
즉, 연산자는 사실 스페셜 메소드(특수 메소드)를 호출하는 단순화된 문법일 뿐입니다.
+ 연산자는 __add__() 메소드를 호출하고, 연산 대상이 아규먼트로 전달됩니다.
int, str 등의 클래스에 이 메소드가 미리 구현되어 있어 우리가 자연스럽게 사용할 수 있는 것입니다.
함수도 객체?
우리가 정의한 함수도 사실 객체입니다. 함수 호출도 () 연산자가 아니라 __call__() 메소드가 실행되는 것입니다.
def print_hello():
print("안녕하세요!")
print_hello() # 안녕하세요!
print_hello.__call__() # 안녕하세요!
즉, 함수를 정의하면 해당 함수의 __call__() 메소드가 실행될 때 수행할 동작을 설정하는 것과 같습니다.
이 덕분에 우리는 괄호 ()를 사용해 함수를 호출할 수 있는 것이죠!
연산자와 스페셜 메소드
이제 우리가 사용했던 연산자와 괄호들이 단순한 문법적 표현일 뿐이며, 결국 특정 스페셜 메소드를 호출하는 것임을 이해했죠? 파이썬에서는 다양한 스페셜 메소드가 존재하며, 이를 활용하면 기본 자료형처럼 *연산자(+, -, , /)나 소괄호, 대괄호를 활용하는 클래스를 직접 만들 수도 있습니다.
핵심 정리
✔ 파이썬의 모든 것은 객체이며, 특정 클래스의 인스턴스다!
✔ + 연산자는 __add__() 메소드를 호출하는 문법적 표현일 뿐이다.
✔ 함수도 객체이며, __call__() 메소드를 통해 실행된다.
✔ 스페셜 메소드를 활용하면 우리가 만든 클래스도 연산자나 괄호를 활용할 수 있다!
파이썬은 완전한 객체 지향 언어이며, 이를 이해하면 더욱 유연하고 강력한 코드를 작성할 수 있습니다!
'파이썬 > 클래스와 객체 지향' 카테고리의 다른 글
[객체 지향 프로그래밍 4개의 기둥] 추상화와 문서화 스타일 (0) | 2025.03.20 |
---|---|
🧐 스페셜 메소드(Special Method)란? (0) | 2025.03.20 |
인스턴스 메소드 vs 클래스 메소드 (0) | 2025.03.20 |
[객체 지향 프로그래밍 4개의 기둥] 추상화를 통해 다형성을 구현하는 방법 (0) | 2025.03.18 |
[객체 지향 프로그래밍 4개의 기둥] 다형성 (0) | 2025.03.18 |