Table of Contents
객체 지향 프로그래밍
- 프로그램은 “여러 독립된 객체들 간의 상호작용” 이라는 관점
- 객체는 클래스를 통해 정의된다
-
파이썬의 모든 것은 객체다
- 객체지향 프로그래밍의 가장 큰 장점은 유지/보수가 쉽고, 확장성이 뛰어나다는 것이다
- 거대한 하나의 프로그램을 객체지향 방식으로 프로그래밍 하기 위해서는 지켜야할 원칙이 있다. 이를 SOLID 원칙이라고 한다
클래스
- 객체를 정의하는 방법이다
- 자동차에 비유하면 클래스는 자동차의 설계도에 해당한다
# 텅 비어있는 Car 설계도 (클래스)
class Car:
pass
객체
- 클래스를 통해 만드는 실체다. 인스턴스라고도 한다
- 개별 객체는 모두 메모리에 올라간다
car_1 = Car()
car_2 = Car()
속성
- 클래스에 정의된 변수를 말한다
- 자동차의 브랜드, 색깔, 가격과 같은 것
-
정의된 위치에 따라 클래스 변수, 인스턴스 변수가 있다
- 클래스 변수
- 모든 인스턴스가 공유하는 속성
- 클래스 스코프에서 정의한다
- 인스턴스 변수
- 각각의 인스턴스가 독립적으로 가지는 속성
__init__
이라는 메서드 스코프에서 정의한다
class HyundaiCar:
brand = "Hyundai"
def __init__(self, color):
self.color = color
brand
: 현대 회사에서 생산하는 모든 차량의 브랜드는Hyundai
이므로 클래스 변수로 정의-
color
: 차량 색깔은 자동차마다 다르므로 인스턴스 변수로 정의. 인스턴스 초기화 메서드인__init__()
의 인자로 색깔을 넘겨준다 - 인스턴스(객체)를 생성해보자
car_1 = HyundaiCar("white")
car_2 = HyundaiCar("black")
print(car_1.brand) # Hyundai
print(car_2.brand) # Hyundai
print(car_1.color) # white
print(car_2.color) # black
메서드
- 객체에 정의된 함수를 말한다
- 객체가 가지는 행동을 정의한다
- 자동차의 시동 걸기, 달리기, 와이퍼로 유리 닦기, 경적 울리기와 같은 것
- 속성과 마찬가지로 정의된 위치에 따라 클래스 메서드, 인스턴스 메서드가 있다
-
그 밖에도 파이썬에서 제공하는
__init__
,__str__
과 같은 다양한 매직 메서드가 있다 - 클래스 메서드
- 인스턴스 변수를 사용하지 않고, 클래스 변수만 사용하는 경우 클래스 메서드로 정의할 수 있다
@classmethod
라는 데코레이터를 붙여주면 파이썬이 클래스 메서드로 인식한다- 변수의 첫 번째 인자로
cls
를 넘겨줘야 한다 - 클래스 메서드는 객체를 생성하지 않아도 사용할 수 있다는 특징이 있다
- 정적 메서드
- 인스턴스 변수, 클래스 변수 모두 사용하지 않는 경우 정적 메서드로 정의할 수 있다
@staticmethod
라는 데코레이터를 붙여주면 파이썬이 정적 메서드로 인식한다
- 인스턴스 메서드
- 인스턴스 변수를 사용하는 경우 인스턴스 메서드로 정의해야 한다
- 변수의 첫 번째 인자로 인스턴스 자기 자신을 의미하는
self
를 넘겨줘야 한다
- 매직 메서드
- 파이썬에서 제공하는 특별한 종류의 메서드로 양쪽에 더블 언더바(__) 로 감싸져 있다 (ex.
__init__
) __init__
: 인스턴스를 생성한 후 초기화 목적으로 가장 먼저 호출된다__str__
: 인스턴스를print()
함수로 출력할 때 호출된다
- 파이썬에서 제공하는 특별한 종류의 메서드로 양쪽에 더블 언더바(__) 로 감싸져 있다 (ex.
import pandas as pd
class HyundaiCar:
brand = "Hyundai"
# 매직 메서드
def __init__(self, color):
self.color = color
# 클래스 메서드
@classmethod
def get_brand(cls):
print(f"차량 브랜드는 {cls.brand} 입니다")
@staticmethod
def beep():
print("빵빵")
# 인스턴스 메서드
def change_color(self, color):
self.color = color
print(f"차량 색깔이 {self.color}로 변경되었습니다.")
친절한 클래스 되기
- Docstring
- Type hinting