본문 바로가기
파이썬(Python)/문법 내용정리

객체 in Python

by HealingMusic 2021. 2. 7.

파이썬의 모든 자료형은 객체이다.

C언어를 예로 들어보자.

C언어에서 int num = 10; 과 같이 정수 변수를 하나 생성한다면, 4byte (아주 옛날 프로세서가 아니라면) 만큼의 메모리에 10을 저장하는 방식으로 동작한다. 따라서 C언어에서 정수의 크기는 4byte이다. 또한 정수들로 이루어진 배열을 생성하게 되면, '4 x 배열의 길이' 만큼의 메모리를 차지한다. 

 

그렇다면 파이썬에서 정수의 크기는 4byte일까? 직접 확인해 보자.

>>> num = 10
>>> num.__sizeof__()
28

무려 28바이트이다. 이는 파이썬의 특성 때문인데, 파이썬은 모든 자료형이 객체이다.

아래는 위의 num 변수가 가지고 있는 '내장 변수' 들을 출력하는 코드이다.

>>> import pprint # 단지 결과를 깔끔하게 출력하기 위해 import하였음
>>> num = 10
>>> pprint.pprint(dir(num))
['__abs__',
 '__add__',
 '__and__',
 '__bool__',
 '__ceil__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__float__',
 '__floor__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__index__',
 '__init__',
 '__init_subclass__',
 '__int__',
 '__invert__',
 '__le__',
 '__lshift__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__or__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__round__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 '__xor__',
 'as_integer_ratio',
 'bit_length',
 'conjugate',
 'denominator',
 'from_bytes',
 'imag',
 'numerator',
 'real',
 'to_bytes'] # ㅎㅎ....;;

어.... 이정도이다.

파이썬에서 정수를 생성하면, C언어처럼 단순히 메모리 공간에 해당 정수를 저장하는 것이 아니라, int 클래스의 객체가 생성된다. 즉 C언어의 int는 해당 수 자체만을 저장하는 것과 달리, 파이썬은 해당 정수와 관련된 많은 함수들 (매직 메소드라고 불리는), 관련된 변수들을 포함한다. 맨 위에서 정수의 크기를 알아보기 위해 __sizeof__() 함수를 사용하였는데, 이 역시 int 클래스의 멤버함수들 중 하나이다. 참고로 __ (더블 언더스코어, 던더) 2개로 이루어진 이러한 함수들을 매직 메소드라고 하는데, 이들에 대해서는 추후 다룰 기회가 있을 것이다.

 

이처럼 파이썬의 모든 자료형이 객체라는 개념이 박혀 있으면 다른 내용들을 이해할 때 도움이 많이 될 것이라고 생각한다. 

'파이썬(Python) > 문법 내용정리' 카테고리의 다른 글

빗물 트래핑  (0) 2021.02.11
함수 인자 전달  (0) 2021.02.07
Collections 모듈 - Counter  (0) 2021.01.31
Type Hint (타입 힌트)  (0) 2021.01.29
Generator (제너레이터)  (0) 2021.01.28

댓글