본문 바로가기
Python

객체

by Salgoo26 2021. 8. 30.

객체

객체(object)는 특정 타입의 인스턴스(instance) 이다.

  • 1, 1000, 930 모두 int의 인스턴스
  • 'hi', 'sun'은 모두 string의 인스턴스
  • [232, 1], []은 모두 list의 인스턴스
# int 클래스
a = 1

# 위의 코드는 사실상 다음 코드와 동일
a = int(1)

# 즉, int라는 클래스를 활용하여 a라는 instance를 찍어내는 것이다.

객체의 특징

  • 타입(type) : 어떤 연산자(operator)와 조작(method)이 가능한가?
  • 속성(attribute) : 어떤 상태(data)를 가지는가?
  • 조작법(method) : 어떤 행위(함수)를 할 수 있는가?

is 연산자

  • 객체의 아이덴티티를 검사하는 연산자
type(10) is int
=> True

isinstance 함수

  • isinstance(object, classinfo)
  • 인자로 넘겨받은 object가 classinfo 의 인스턴스인가? 를 확인
  • classinfo의 subclass에 의해 object가 만들어진 경우에도 True 반환
isinstance(0, (int, bool, complex))
=> True

객체 - 속성

  • <object>.<attribute>
  • 속성은 객체의 상태/데이터

객체 - 메서드

  • <object>.<method>
  • 메서드는 특정 객체에 적용될 수 있는 행위를 의미함
  • 일반적으로 클래스 내부에 정의된 함수임
  • 기존 함수와는 다르게, 특정 객체가 메서드를 호출한다라고 이해하면 됨
# str 클래스 내부...
class str:
    ...
    def capitalize(self):
        ...

# 호출
'text'.capitalize()

객체 지향 프로그래밍

  • Object-Oriented-Programming 이라고 하며, 컴퓨터 프로그래밍의 패러다임 중 하나임

  • 컴퓨터 프로그램을 명령어의 목록으로 보는 관점에서 벗어나, 여러 개의 독립딘 단위, 즉 객체 들의 모임으로 파악하고자 하는 것이다.

  • 반대의 개념으로 절차 지향 프로그래밍(Procedual Programming)이 있음

  • 왜 OOP를?

    • 현실 세계를 프로그램 설계에 반영하기 위함 - 이를 추상화라 한다

클래스와 인스턴스

  • 클래스 정의, 인스턴스 생성, 메서드 호출, 속성
  • 클래스를 정의하고, 인스턴스들을 만들어 활용함
    • 클래스: 객체들의 분류(class)
    • 인스턴스 : 하나하나의 실체. 행동 대장
  • 클래스의 이름은 Pascal case를, 메서드는 snake case를 따른다.

속성

  • 특정 데이터 타입/클래스의 객체들이 가지게 될 상태/데이터를 의미

메서드

  • 특정 데이터 타입/클래스의 객체가 공통적으로 호출할 수 있는 행위(함수)

self

  • 인스턴스 자기 자신

  • 인스턴스 메서드는 호출 시, 첫 번째 인자로 인스턴스 자신이 전달되도록 설계됨

  • 매개변수 이름으로 self 를 지정하도록 약속

'apple'.capitalize()
# 위 코드는 다음 코드와 사실상 동일
str.capitalize('apple')

예시

# 클래스 예시
class Person:
    def __init__(self, name): # (생성자)메서드
        self.name = name # 속성
        print('{name}이 생성되었습니다.')

    def __del__(self):
        print('{self.name}이 소멸되었습니다.')

    def talk(self): # 인스턴스 메서드
        return 'Hi, my name is {self.name}'

생성자(constructor)

  • 인스턴스 객체가 생성될 때 호출되는 메서드

  • 위 예시 참고

소멸자(destructor)

  • 인스턴스 객체가 소멸되기 직전 호출되는 메서드
  • 위 예시 참고

매직 메서드

  • double underscore(__)가 있는 메서드는 특수한 동작을 위해 만들어진 메서드로, 스페셜 메서드 혹은 매직 메서드라고 불림
  • 어떤 것들이 있나?
# 여러가지 매직 메서드
- __str__(self), __repr__(self)
- __le__(self, other), __eq__(self, other)
  • 사용예시
class Person:
    def __init__(self, name, height): # (생성자)메서드
        self.name = name # 속성
        self.height = height # 속성
        print('키가 {height}인 {name}이 생성되었습니다.')

    def __del__(self):
        print('{self.name}이 소멸되었습니다.')

    def talk(self): # 인스턴스 메서드
        return 'Hi, my name is {self.name}'

    def __gt__(self, other):
        return self.heigt > other.height # 객체간 > 연산자로 비교했을 때 해당 내용 리턴
                                # 이 경우, 각 개체가 갖고 있는 height 속성값 크기 비교
# 결과 확인
p1 = Person('sun', 171)
p2 = Person('Hun', 201)

p1 > p2

=> 키가 171인 sun이 생성되었습니다.
=> 키가 201인 hun이 생성되었습니다.
=> False

'Python' 카테고리의 다른 글

클래스와 인스턴스  (0) 2021.08.30
객체지향 프로그래밍  (0) 2021.08.30
데이터 구조  (0) 2021.08.30
제어문  (0) 2021.08.30
컨테이너  (0) 2021.08.30

댓글