[Python] 클래스

2 minute read

[Python] 클래스

Inflearn Study

링크: https://www.inflearn.com/

  • 인프런에서 “파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자” 강의를 들으며 혼자 공부한 내용입니다.

클래스

# 클래스를 사용 안하는 경우
name = "마린" # 유닛의 이름
hp = 40 # 유닛의 체력
demage = 5 # 유닛의 공격력

print("{}유닛이 생성되었습니다.".format(name))
print("체력 {0}, 공격력 {1}\n".format(hp, demage))

# 탱크 : 공격 유닛, 탱크. 포를 쏠 수 있음. 일반 / 시즈 모드
tank_name = "탱크"
tank_hp = 150
tank_demage = 35

print("{}유닛이 생성되었습니다.".format(tank_name))
print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_demage))

def attack(name, location, demage):
    print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]".format(\
                                                       name, location, demage))
attack(name, "1시", demage)
attack(tank_name, "1시", tank_demage)
  • 클래스를 사용 안하는 경우 같은 내용이여도 전부 새로 지정해줘야 합니다.
# 클래스를 사용하는 경우
class Unit:
    def __init__(self, name, hp, damage): # 생성자
        self.name = name # 멤버 변수(클래스 내 생성된 변수)
        self.hp = hp
        self.damage = damage
        print("{}유닛이 생성되었습니다.".format(self.name))
        print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

marine1 = Unit("마린", 40, 5) # unit 클래스의 인스턴스
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35)
  • 객체: 메소드와 변수의 묶음입니다.
  • 클래스: 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화입니다.
  • 인스턴스: 클래스로부터 만들어진 것입니다.

init

def __init__(self, name, hp, damage): # 생성자
        self.name = name # 멤버 변수(클래스 내 생성된 변수)
        self.hp = hp
        self.damage = damage
        print("{}유닛이 생성되었습니다.".format(self.name))
        print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
  • init : 초기화 메소드로 정의된 생성자 함수
    • 객체가 생성될 때 자동으로 호출되는 메소드

멤버 변수

self.name = name # 멤버 변수(클래스 내 생성된 변수)
self.hp = hp
self.damage = damage
  • 멤버변수: 클래스 내에서 정의된 변수
# 레이스 : 공중 유닛, 비행기, 클로킹(상대방에게 보이지 않음)
wraith1 = Unit("레이스", 80, 5)
print("유닛 이름: {0}, 공격력 {1}".format(wraith1.name, wraith1.damage))
  • 외부에서 멤버변수를 호출하는 경우

메소드

class AttackUnit: # 공격 유닛
    def __init__(self, name, hp, damage): # 생성자
        self.name = name # 멤버 변수(클래스 내 생성된 변수)
        self.hp = hp
        self.damage = damage
    
    def attack(self, location): # self는 따로 보내줄 필요 없음
        print("{0} : {1} 방향으로 적군을 공격합니다. [공격력: {2}]"\
            .format(self.name, location, self.damage))
    
    def damaged(self, damage):
        print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴되었습니다".format(self.name))
  • 메소드 : 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수
  • self
    • 메소드의 첫번째 인자
    • 인스턴스의 매개변수를 전달 할 때에는 self 매개변수는 생략하고 전달합니다.
# 메딕 : 의무병
# 파이어뱃 : 공격 유닛, 화염 방사기. 
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")

# 공격을 2번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)
  • 외부에서 메소드를 사용하는 경우

메소드

class AttackUnit: # 공격 유닛
    def __init__(self, name, hp, damage): # 생성자
        self.name = name # 멤버 변수(클래스 내 생성된 변수)
        self.hp = hp
        self.damage = damage
    
    def attack(self, location): # self는 따로 보내줄 필요 없음
        print("{0} : {1} 방향으로 적군을 공격합니다. [공격력: {2}]"\
            .format(self.name, location, self.damage))
    
    def damaged(self, damage):
        print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴되었습니다".format(self.name))
  • 메소드 : 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수
  • self
    • 메소드의 첫번째 인자
    • 인스턴스의 매개변수를 전달 할 때에는 self 매개변수는 생략하고 전달합니다.
# 메딕 : 의무병
# 파이어뱃 : 공격 유닛, 화염 방사기. 
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")

# 공격을 2번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)
  • 외부에서 메소드를 사용하는 경우

Leave a comment