1) 절차 지향 : 기능들을 어떤 순서로 처리할 것인가에 초점을 맞춘다.
2) 객체 지향 : 객체가 중심이 되고, 객체를 정의하고 객체간 상호작용에 초점을 맞춘다.
👉 프로그램의 규모가 작으면 절차 지향, 크면 객체 지향을 주로 사용한다.
1) 인스턴스 속성 : 객체마다 다르게 가지는 속성
class Unit:
def __init__(self, name, hp, shield, damage):
self.name = name # self는 객체 자기 자신을 의미
self.hp = hp
self.shield = shield
self.damage = damage # 얘네들이 인스턴스 속성
✅ 클래스 안에서 속성을 사용할 때 : self.속성명
✅ 클래스 밖에서 속성을 사용할 때 : 객체명.속성명
2) 클래스 속성 : 모든 객체가 공유하는 속성
class Unit:
count = 0
def __init__(self, name, hp, shield, damage):
self.name = name # self는 객체 자기 자신을 의미
self.hp = hp
self.shield = shield
self.damage = damage # 얘네들이 인스턴스 속성
Unit.count += 1 # 클래스 속성은 클래스명.속성명
3) 비공개 속성 : 클래스 안에서만 접근 가능한 속성
class Unit:
def __init__(self, name, hp, shield, damage):
self.name = name # self는 객체 자기 자신을 의미
self.__hp = hp # 비공개 속성으로 클래스 밖에서 변경이 불가능
self.shield = shield
self.damage = damage
👉 클래스 밖에서 접근하려고 한다면? 네임 맹글링 사용
# 네임 맹글링 (name mangling)
probe._Unit__hp = 9999
1) 인스턴스 메서드 : 인스턴스 속성에 접근할 수 있는 메서드
2) 클래스 메서드 : 클래스 속성에 접근하기 위해서 사용
3) 정적 메서드 : 인스턴스를 만들 필요가 없는 메서드
class Math:
def add(x,y):
return x + y
def sub(x,y):
return x - y
4) 매직 메서드 : 클래스안에 정의할 수 있는 스페셜 메서드
__init__
__str__ 과 같은 메서드를 말한다.
dir(인스턴스명) 을 print하면 매직 메서드에 대한 정보를 얻을 수 있다.
: 클래스들의 공통된 속성과 메서드를 뽑아내서 부모 클래스를 만든다.
-> 이를 자식 클래스에서 상속받아서 사용한다.
1) 장점
class Item:
"""
속성 : 이름
메서드 : 줍기, 버리기
"""
def __init__(self, name):
self.name = name
def pick(self):
print(f"[{self.name}]을(를) 주웠습니다.")
def discard(self):
print(f"[{self.name}]을(를) 버렸습니다.")
class Weapon(Item):
"""
속성 : 공격력
메서드 : 공격하기
"""
def __init__(self, name, damage):
super().__init__(name) # 부모 클래스 호출
self.damage = damage
def attack(self):
print(f"[{self.name}을(를) 이용해 {self.damage}로 공격합니다.]")
class HealingItem(Item):
"""
속성 : 회복량
메서드: 사용하기
"""
def __init__(self, name, recovery_amount):
super().__init__(name)
self.recovery_amount = recovery_amount
def use(self):
print(f"[{self.name}을(를) 사용합니다. {self.recovery_amount} 회복]")
m16 = Weapon("m16", 110)
bungdae = HealingItem("붕대", 20)
m16.attack()
bungdae.use()
2) 추상 클래스
from abc import *
class Item(metaclass=ABCMeta): # 추상클래스로 만들어줌
"""
속성 : 이름
메서드 : 줍기, 버리기
"""
def __init__(self, name):
self.name = name
def pick(self):
print(f"[{self.name}]을(를) 주웠습니다.")
def discard(self):
print(f"[{self.name}]을(를) 버렸습니다.")
@abstractmethod
def use(self):
pass
class Weapon(Item):
"""
속성 : 공격력
메서드 : 공격하기
"""
def __init__(self, name, damage):
super().__init__(name) # 부모 클래스 호출
self.damage = damage
def use(self): #attack이 아닌 use를 사용해야 한다.
print(f"[{self.name}을(를) 이용해 {self.damage}로 공격합니다.]")
class HealingItem(Item):
"""
속성 : 회복량
메서드: 사용하기
"""
def __init__(self, name, recovery_amount):
super().__init__(name)
self.recovery_amount = recovery_amount
def use(self):
print(f"[{self.name}을(를) 사용합니다. {self.recovery_amount} 회복]")
m16 = Weapon("m16", 110)
bungdae = HealingItem("붕대", 20)
m16.use()
bungdae.use()