- 객체(Object)
객체란 어떠한 속성(attribute)과 행동(method)을 가지고 있는 데이터입니다. 파이썬의 모든 것들(숫자, 문자, 함수 등)은 여러 속성과 행동을 가지고 있는 데이터입니다.
- 객체지향프로그래밍(Object-Oriented Programming)이란
객체지향프로그래밍이란 컴퓨터 프로그래밍의 패러다임 중 하나로 컴퓨터 프로그램을 그저 명령어의 목록으로 보는 시각에서 벗어나 데이터를 추상화시켜 각자 상태와 행위를 가진 독립된 객체를 만들고 객체들의 유기적인 상호작용을 이용하는 프로그래밍 방법입니다.
파이썬은 객체로 구성되어 있고, 객체지향프로그래밍을 가능하게 하지만 객체지향프로그래밍을 강제하지 않는 프로그래밍 언어입니다.
- 클래스(Class)와 객체(Object)
객체란 어떠한 속성과 행동을 가지고 있는 데이터라고 하였는데, 객체는 자신이 가지고 있는 클래스에 따라 속성(attribute)과 행동(method)이 나뉘어집니다.
객체는 클래스를 통해 생성됩니다. 객체를 다양한 모양의 쿠키라고 한다면 클래스는 객체를 만드는 쿠키의 틀입니다. 만약 하트 모양의 쿠키틀을 이용해 쿠키를 만들면 하트 모양의 쿠키가 만들어지는 것처럼 객체의 타입은 어떤 클래스로 만들어졌느냐로 결정됩니다. 객체들은 고유한 성격을 가지고 있어 동일한 클래스로 만든 객체라도 서로 전혀 영향을 주지 않습니다. 만든 쿠키를 한 입 먹어도 다른 쿠키에 영향을 주지 않는 것처럼 말이죠.
>>> a = '안녕하세요'
>>> type(a)
<class 'str'>
>>> b = 1
>>> type(b)
<class 'int'>
객체는 각각의 타입(type)이 존재합니다. type 함수를 통해 각 객체의 타입을 확인할 수 있습니다. 객체의 타입은 객체를 만든 클래스와 같습니다. 객체 a는 클래스 'str'로 만들어졌으며 객체 b는 클래스 'int'로 만들어진 것을 알 수 있습니다. 쿠키 틀로 비교하자면 쿠키 a는 쿠키틀 'str'로 만들어졌으며 쿠키 b는 쿠키틀 'int'로 만들어진 것입니다. 하나의 클래스를 만드는 것은 하나의 새로운 타입을 만드는 것과 같습니다. 객체끼리 서로 같은 타입을 가진다면 같은 속성과 행동(메소드)를 가지게 됩니다.
- 인스턴스(instance)와 객체(object)
인스턴스와 객체는 같은 것을 뜻합니다. 하지만 객체만 지칭할 때는 객체라고 부르고 클래스와 연관지어서 말할 때는 인스턴스라고 부릅니다.
>>> class HeartCookie:
pass
>>> a = HeartCookie()
>>> type(a)
>>> a는 객체
>>> a는 HeartCookie의 인스턴스
- 객체의 속성값, 메서드 확인
>>> a = 'hello'
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex',
'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> b = 1
>>> dir(b)
['__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']
dir 함수를 사용하면 객체의 속성값과 메서드를 확인할 수 있습니다. 여기서 밑줄 두개(__)가 앞 뒤로 있는 값들은 스페셜 속성, 메서드입니다. 우리가 사용하도록 만들어져 있는 속성과 메소드는 밑줄 두개(__)가 없는 값들입니다.
- 클래스 만들기
>>> class HeartCookie:
pass
>>> a = HeartCookie()
>>> type(a)
<class '__main__.HeartCookie'>
빈 클래스 HeartCookie를 만들고 변수 a를 HeartCookie 클래스에 할당하면 a는 HeartCookie의 인스턴스(객체)가 됩니다.
<참고>
- 점프 투 파이썬 - 클래스
- 제대로 파이썬 - 파이썬은 객체로 이루어져있다.
- 파이썬 코딩도장 - 34.1 클래스와 메서드 만들기
- 기본기를 쌓는 정아마추어 코딩 블로그 - 객체 지향 프로그래밍이 뭔가요?
'Python' 카테고리의 다른 글
[Python] 클래스 비공개 속성 (0) | 2021.05.22 |
---|---|
[Python] 클래스(class) 사용하기 (0) | 2021.05.21 |
[Python] 전역변수, 지역변수, global, nonlocal (0) | 2021.05.12 |
[Python] 포매팅을 이용해 숫자 자리 개수 맞추기 (0) | 2021.05.03 |
[Python] 문자열 포매팅, % (0) | 2021.05.03 |