🦄객체(Object)란?
: 존재하는 모든 것을 의미하며 객체 간의 상호작용으로 사건이 발생함. 객체는 속성(attribute)과 기능(method)을 가지고 있음
class Name(object):
class BOOK():
title = ""
author = ""
publisher = ""
book = BOOK()
book = BOOK()
: BOOK는 Class이고, book는 intance. book이라는 instance를 생성하여 메모리에 할당하는 과정.
속성에는 클래스 속성과 인스턴스 속성 두 가지 종류가 있음. 클래스 속성은 모든 인스턴스가 공유하여 전체가 사용하는 값을 저장할 때 사용하며 인스턴스 속성은 인스턴스 별로 독립되어 있어 각 인스턴스 마다 다른 값을 저장할 때 사용함.
class Name:
attribute = value
class 바로 아래에 클래스 속성을 정의할 수 있음.
이때, title이 Book 클래스의 클래스 속성임. 클래스 속성은 클래스에 속해 있으며 모든 인스턴스에서 공유하는 것을 알 수 있음.
self.title = title
에서 self
는 현재 인스턴스를 의미하기 때문에 'Book.title = title'로 바꾸는 것이 더 명확한 표현임.
class Book:
title = ""
def get_title(self, title):
Book.title = title
Python에서 속성 및 method의 이름을 찾을 때, instance -> class 순으로 찾음. 따라서 instance 속성이 없다면 class 속성을 찾게 되어 겉보기에 instance 속성을 사용하는 것 같아도 class 속성임.
인스턴스 속성은 서로 영향을 주지 않음.
__attribute
와 같이 __
로 비공개 속성을 생성할 수 있음. 이러한 비공개 속성은 클래스 안에서만 접근 가능하며 외부에서 접근 불가능함.
클래스 상속은 한 클래스에서 다른 클래스로 기능을 물려주는 것을 말함. 이때 상속받은 클래스는 물려받은 기능을 유지하고 다른 기능을 추가할 수 있음. 상속으로 중복된 method를 재정의할 필요가 없다는 장점이 있음.
Base Class
: 기능을 물려주는 기반 클래스로 부모 클래스(parent class), 슈퍼 클래스(super class)라고 함.
Derived Class
: 상속 받아 새롭게 만드는 클래스. 자식 클래스(child class), 서브 클래스(sub class)라고 부름.
class SuperClass:
pass
class SubClass:
pass
class Vehicle:
def transport(self):
print("transport")
class Subway(Vehicle):
def fare(self):
print('2$')
subway = Subway()
subway.transport()
subway.fare()
Subway 클래스에 transport method가 없지만 Vehicle을 상속받았기 때문에 호출가능.
Super Class의 속성 사용하기
super()
을 사용하여 super class의 __init__ method를 호출하여 super class 초기화하여 오류를 막을 수 있음.
부모 클래스로부터 상속받은 특정 메서드를 자식 클래스에서 재정의하는 작업을 의미함.
>> car = Car(2, 1000)
>> car.wheel
2
>> car.price
1000
car = Car(2, 1000)
instance에 Class Car을 할당할 때, 두 개의 인수(wheel, price)를 받아야 하므로 생성자 __init__(self, wheel, price)
를 정의한다.
>> bicycle = Bicycle(2, 100)
>> bicycle.price
100