제로베이스 데이터 취업 스쿨 과정 학습 내용을 정리한 포스팅입니다.
📍 객체 지향 프로그래밍
객체(object) = 속성(attribute) + 기능(function)
객체 사용의 장점 : 코드 재사용, 모듈화.
자동차를 예로 들면, 자동차의 배터리가 차체와 일체형이 아닌 교체형일 때, 배터리(수정이 필요한 부분)만 교체할 수 있어서(결합도가 낮아서) 이상적인 프로그램을 만들 수 있다.
📍 클래스와 객체
기능들을 아우를 수 있는 클래스를 선언하고 그 안에 각 기능을 만든다.
객체 car1, car2는 클래스를 호출하여 만든 각각의 객체이다. car1과 car2 라는 객체로 작업함으로써 결합도를 낮춰 원본 클래스를 유지하면서 기능하게 할 수 있다.
생성자 __init__은 객체가 생성될 때 먼저 자동 호출된다. 속성을 초기화하는 기능
객체의 속성값(위의 예시에서는 color, length)은 객체에 따라 다르게 지정할 수 있으며, 지정 후에도 변경할수 있다.
car1.color = 'orange' # red를 orange로 변경
📍 얕은 복사, 깊은 복사
car1 = Car('red', 200)
위와 같이 객체를 생성한 경우 car1이라는 변수는 객체의 메모리 주소를 저장하고 이를 통해 객체를 참조한다.
얕은 복사
그런데, car3 = car1 과 같이 car3을 생성할 경우, 객체 자체가 복사되지 않고 참조하는 주소를 복사하게 된다.
즉, car1에서 속성을 변경할 경우 car3의 속성도 변경된다.(같은 주소를 바라보고 있기 때문에)
깊은 복사
깊은 복사를 할 경우, 참조하는 주소를 복사하는 것이 아니라 똑같은 객체를 다른 메모리 주소에 저장한다.
즉, car1에서 속성을 변경해도 car3는 다른 주소를 참조하고 있기 때문에 영향을 받지 않는다.
# 깊은 복사
import copy
car3 = car1.copy()
car3 = copy.deepcopy(car1) # deepcopy()는 배열의 내부 객체까지 복사. 이중 배열이상에서도 완전한 깊은 복사 가능
📍 클래스 상속
클래스는 다른 클래스를 상속하여 상위 클래스의 속성과 기능을 사용할 수 있다.
class CalculatorSuper:
def __init__(self, pNum1, pNum2):
self.pNum1 = pNum1
self.pNum2 = pNum2
def add(self, n1, n2):
return n1 + n2
def sub(self, n1, n2):
return n1 - n2
class CalculatorChild(CalculatorSuper): # 위의 상위 클래스를 상속받는다.
def __init__(self, cNum1, cNum2):
super().__init__(100, 200) # super().__init__ 을 하면 하위 클래스 객체 생성시 상위클래스의 속성 초기화 가능
def mul(self, n1, n2):
return n1 * n2
def div(self, n1, n2):
return n1 / n2
cal = CalculatorChild() # 하위 클래스 객체 생성
cal.add(10, 20) # 상위 클래스의 기능임에도 상속받았기에 사용가능
📍 오버라이딩
오버라이딩 : 하위 클래스에서 상위 클래스의 메서드를 재정의
class Robot:
def fire(self):
print("총알 발사!!")
class NewRobot(Robot): # 상속
def fire(self):
print("레이저 발사!!") # 상위 클래스의 fire 메서드가 아닌 재정의 된 fire로, "레이저 발사!!" 출력
📍 추상클래스
상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
즉, 상위 클래스에서는 메서드를 선언만 해놓고, 하위 클래스에서 꼭 구현하여야만 기능할 수 있도록 한다.
from abc import ABCMeta
from abc import abstractmethod
class AirPlane(metaclass=ABCMeta):
@abstractmethod
def flight(self): # 추상 클래스를 선언했으므로 하위클래스에서 이 추상 메서드를 꼭 구현하여야만 한다.
pass
class Airliner(AirPlane):
def flight(self): # 추상 메서드 구현
print("시속 400km/h 비행!!")
'Programming > Python' 카테고리의 다른 글
파이썬 수학 - 약수, 소수, 소인수, 진법 변환, 수열, 순열, 조합 (0) | 2023.05.23 |
---|---|
파이썬 중급 - 03 예외 처리, finally, Exception, 파일 쓰기, 읽기 (0) | 2023.05.11 |
파이썬 중급 - 01 (0) | 2023.05.08 |
파이썬 기초 - 03 (0) | 2023.05.07 |
파이썬 기초 - 02 (0) | 2023.05.06 |