해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다
- 객체는 속성과 기능으로 구성된다
- 클래스(class)를 이용하여 객체를 생성할 수 있다
(출처:제로베이스데이터스쿨)
📝입력
class Car:
def __init__(self, col, len):
self.color = col
self.length = len
def doStop(self):
print("stop")
def doStart(self):
print("start")
def printCarInfo(self):
print('self.color : {}'.format(self.color))
print('self.length : {}'.format(self.length))
car1 = Car('red', 200)
car2 = Car('blue', 300)
car1.printCarInfo()
car2.printCarInfo()
🧾출력
self.color : red
self.length : 200
self.color : blue
self.length : 300
📝입력
print('개체 속성 변경 전')
car1 = Car('red', 200)
car1.printCarInfo()
print()
print('개체 속성 변경 후')
car1.color = 'green'
car1.printCarInfo()
🧾출력
개체 속성 변경 전
self.color : red
self.length : 200
개체 속성 변경 후
self.color : green
self.length : 200
- 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다
(출처:제로베이스데이터스쿨)
- 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
(출처:제로베이스데이터스쿨)
- 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
(출처:제로베이스데이터스쿨)
📝입력
print('위에서 만들어놓은 car 클래스를 사용한다')
car1 = Car("red", 200)
car1.printCarInfo()
print()
print('얕은 복사')
car2 = car1
car1.color = 'green'
car2.printCarInfo()
print()
print('깊은 복사')
import copy
car3 = copy.deepcopy(car1)
car1.color = 'blue'
car3.printCarInfo()
print()
print('얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다')
print('깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다')
🧾출력
위에서 만들어놓은 car 클래스를 사용한다
self.color : red
self.length : 200
얕은 복사
self.color : green
self.length : 200
깊은 복사
self.color : green
self.length : 200
얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다
깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다
- 얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다
- 깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다
- 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
(출처:제로베이스데이터스쿨)
📝입력
class NormalCar:
def drive(self):
print('[NormalCar] drive() called!!')
def back(self):
print('[NormalCar] back() called!!')
class TurboCar(NormalCar):
def turbo(self):
print('[TurboCar] turbo() called!!')
myTurboCar = TurboCar()
myTurboCar.turbo()
myTurboCar.back()
🧾출력
[TurboCar] turbo() called!!
[NormalCar] back() called!!
- 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다.
- 이를 이용하여 클래스의 속성을 초기화한다.
(출처:제로베이스데이터스쿨)
- 상위 클래스의 속성을 초기화하기 위해서 super()를 이용한다.
(출처:제로베이스데이터스쿨)
- 클래스는 여러 클래스를 다중상속할 수 있다.
📝입력
class Car1:
def drive(self):
print('drive() method called!!')
class Car2:
def turbo(self):
print('turbo() method called!!')
class Car3:
def fly(self):
print('fly() method called!!')
class Car(Car1, Car2, Car3):
def __init(self):
pass
myCar = Car()
myCar.drive()
myCar.turbo()
myCar.fly()
🧾출력
drive() method called!!
turbo() method called!!
fly() method called!!
- 하위 클래스에서 상위 클래스의 메서드를 재정의(override)한다.
(출처:제로베이스데이터스쿨)
- 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
(출처:제로베이스데이터스쿨)
*abc(abstract base class)모듈 : 추상클래스 생성 모듈