Python | 클래스와 객체, 인스턴스

Sua·2020년 12월 27일
0

Python

목록 보기
21/28
post-thumbnail

클래스 : 데이터 유형

클래스는 데이터 유형을 나타내는 데이터이다.

파이썬이 제공하는 기본 데이터 유형을 생각해보자. 정수, 실수, 문자열, 불리언, 리스트, 사전, 집합 등 여러 가지 데이터 유형이 잇다. tpye() 함수를 이용해 데이터의 유형을 구할 수 있다.

0, 1, 2,의 데이터 유형이 정수인 것처럼 int, float, str의 데이터 유형은 클래스다

  • 데이터 : 값과 유형으로 구성된 정보
  • 데이터 유형 : 데이터가 어떤 범주에 속하는지를 나타내는 데이터의 구성요소. 클래스로 표현된다.
  • 클래스 : 데이터 유형을 나타내는 데이터. int, float, str 등이 있다.

객체 : 개별 데이터

파이썬에서는 객체(object)라는 단위로 메모리 위의 정보를 관리한다. 객체에는 값(value)·유형(type)·정체성(identity)이라는 세 특성이 있다.

값은 메모리에 기록된 내용이다. 가변 객체는 값이 바뀔 수 있지만 불변 객체는 값이 바뀌지 않는다. 유형은 데이터의 종류로, 유형에 따라 그 값을 어떻게 읽고 다루어야 할지가 결정된다. 정체성은 각각의 객체를 식별하기 위한 고유번호로, 객체가 메모리 속에서 위치한 주소 값이기도 하다.

객체의 값은 객체를 평가함으로써 구할 수 있고(객체는 값 그 자체이고, 그 자신으로 평가된다), 유형은 type() 함수로, 정체성은 id() 함수로 구할 수 있다.

  • 객체: 메모리에 존재하는 개별 데이터를 가리키는 개념
  • 객체의 값: 객체를 통해 구할 수 있는 정보 그 자체. 가변 객체는 값이 바뀔 수 있다.
  • 객체의 유형: 객체가 어떤 범주에 속하고 어떻게 다뤄야 하는지를 구별하기 위한 분류. 파이썬에서는 클래스로 유형을 나타내며, type() 함수로 구할 수 있다.
  • 객체의 정체성: 객체를 다른 객체와 구별하기 위한 고유번호이자, 메모리 상의 위치. id() 함수로 구할 수 있다.
  • 변수: 객체에 붙인 이름. 한 객체에 여러 개의 이름을 붙일 수도 있다.

클래스와 인스턴스의 관계

객체가 어떤 클래스에 속할 때, 그 객체를 그 클래스의 인스턴스(instance)라고 부른다.

isinstance() 함수로 객체가 그 클래스에 속하는지(인스턴스인지) 검사할 수 있다.

클래스에 속하는 인스턴스도 여러 개 존재할 수 있다. 또한, 한 객체는 동시에 여러 클래스의 인스턴스일 수 있다. 객체의 유형은 하나의 클래스이지만, 그 유형의 상위 클래스가 있다면 그 객체는 그 상위 클래스의 인스턴스이기도 하다.

인스턴스 만들기

파이썬의 모든 데이터는 객체이고, 모든 객체는 어떤 유형(클래스)에 속한다. 즉, 파이썬의 모든 데이터는 인스턴스다. 파이썬에서 데이터를 생성하는 것은 곧 인스턴스를 생성하는 것이다.

리터럴·식을 평가하거나 인스턴스화(클래스이름())를 수행해 클래스의 인스턴스를 만들 수 있다.

먼저, 수, 문자열 같은 기본 데이터 유형 즉 리터럴을 평가하면 인스턴스가 만들어진다.

>>> 1789      # 정수 리터럴: 정수 인스턴스가 만들어진다
1789

>>> 3.1415    # 실수 리터럴: 실수 인스턴스가 만들어진다
3.1415

>>> 1-2j      # 복소수 리터럴: 복소수 인스턴스가 만들어진다
(1-2j)

>>> '파이썬'  # 문자열 리터럴: 문자열 인스턴스가 만들어진다
'파이썬'

식 또한 인스턴스를 만들어낸다.

>>> 5 * 5             # 산술 식: 수 인스턴스 만들기
25

>>> [1, 2, 3]         # 리스트 식: 리스트 인스턴스 만들기
[1, 2, 3]

>>> {'year': 1789}    # 사전 식: 사전 인스턴스 만들기
{'year': 1789}

>>> lambda x: x * x   # 람다 식: 함수 인스턴스 만들기
<function <lambda> at 0x7ffa0a43ce18>

세 번째 방법으로 인스턴스화(클래스이름())를 수행해 클래스의 인스턴스를 만들 수 있다. 인스턴스화(instantiation)는 모든 클래스에 적용할 수 있는 보편적인 방법이다.

>>> int()            # 정수의 기본 인스턴스 만들기
0

>>> int(1789)        # 1789에 대응하는 정수의 인스턴스 만들기
1789

>>> int('1789')      # '1789'에 대응하는 정수의 인스턴스 만들기
1789

>>> int(1789.0)      # 1789.0에 대응하는 정수의 인스턴스 만들기
1789

>>> list()           # 리스트의 기본 인스턴스 만들기
[]

>>> list((0, 1, 2))  # (0, 1, 2)에 대응하는 리스트의 인스턴스 만들기
[0, 1, 2]

>>> list(range(3))   # range(3)에 대응하는 리스트의 인스턴스 만들기
[0, 1, 2]

클래스 이름에 괄호를 붙여 실행하면, 괄호 속에 전달한 인자에 맞는 인스턴스가 생성된다. 마치 함수 호출처럼 보이지만 함수 호출과는 다르다.

4.5절에서 “데이터 유형의 이름은 데이터를 그 유형으로 변환하는 함수”라고 설명했다. 이것은 엄밀히 따지면 틀린 설명이다. ‘데이터 유형의 이름’은 사실 함수가 아니라 클래스다. 그리고 그 이름을 통해 수행되는 과정은 함수 호출이 아니라 인스턴스화다. 파이썬에서는 한 번 만들어진 객체의 유형을 바꿀 수 없다. 인스턴스화 과정에서 전달된 데이터 유형에 대응되는 새로운 객체(인스턴스)를 만들어내는 것일 뿐이다.

본 포스팅은 아래의 사이트를 참고하여 작성되었습니다.
연오의 파이썬 https://python.bakyeono.net/chapter-6.html

profile
Leave your comfort zone

0개의 댓글