현실에서는?
수업?
학급?
계급?
품격?
개발에서는 타입을 의미한다.
동물, 고양이, 개, 인간
식물, 소나무, 옥수수
물건, 책상, 의자
object
물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별가능한 것을 말한다.
예를 들어 물리적으로 존재하는 학생, 회원 등과 추상적인 생산, 주문, 배송 등이 모두 객체가 될 수 있다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다.
카페에서의 객체
- 손님
- 직원
- 커피기계
- 커피
...등등
- 추상화
필요한 정보를 중심으로 간소화
ex) 지하철 노선도
- 캡슐화 + (정보은닉)
데이터나 기능을 그룹화
ex) 차는 속도가 있으며 가속, 감속이 가능하다.
- 상속
어떤 대상의 데이터나 기능을 물려받는다.
ex) 의자의 하위개념인 시디즈의자는 '무언가를 앉힐 수 있다'라는 기능을 물려 받는다.
- 다형성
어떤 대상은 다양한 형태가 될 수 있다.
ex) 음식에는 라면, 삼겹살 등이 있다.
어떠한 대상의 설계도 또는 명세
의자의 구성, 기능 등을 설명
구현되지 않은 대상 (생각이나 상상)
의자를 머리 속으로 상상
구현된 대상 (실체)
실제 의자
객체의 정보
객체의 기능
추상화, 캡슐화
class Animal:
count = 0
def __init__(self,
age: int = 0
):
"""
Args:
age (int, optional): 동물의 나이. 기본값은 0.
"""
self.age = age
self.name = f"{Animal.count}번"
Animal.count = Animal.count + 1
return
def eat(self):
print(f"동물 {self.name}이 음식을 먹었습니다.")
def get_age(self):
print(f"동물 '{self.name}'의 나이는 {self.age}살 입니다.")
@classmethod
def get_count(cls):
print(f"동물이 {cls.count}마리 생성되었습니다.")
@staticmethod
def hello():
print(f"동물 농장에 오신 것을 환영합니다.")
상속, 다형성
from animal import Animal
class Cat(Animal):
count = 0
def __init__(self,
name: str = "냥",
age: int = 0
):
"""
Args:
name (str, optional): 고양이의 이름. 기본값은 "냥".
age (int, optional): 고양이의 나이. 기본값은 0.
"""
super().__init__(age)
self.name = name
Cat.count = Cat.count + 1
return
def eat(self):
print(f"고양이 '{self.name}'이 음식을 먹었습니다.")
@classmethod
def get_count(cls):
print(f"고양이가 {cls.count}마리 생성되었습니다.")
from animal import Animal
from cat import Cat
Animal.hello()
print()
a = Animal(12)
b = Cat("나옹", 5)
a.eat()
b.eat()
print()
a.get_age()
b.get_age()
print()
Animal.get_count()
Cat.get_count()
# 동물 농장에 오신 것을 환영합니다.
# 동물 0번이 음식을 먹었습니다.
# 고양이 '나옹'이 음식을 먹었습니다.
# 동물 '0번'의 나이는 12살 입니다.
# 동물 '나옹'의 나이는 5살 입니다.
# 동물이 2마리 생성되었습니다.
# 고양이가 1마리 생성되었습니다.