logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [Python] 클래스(Class)

    이미지 보기

    [Python] 클래스(Class)

    • 21.07.18 작성

    • 읽는 데 4

    TOC

    클래스(Class)

    • 스타크래프트 게임을 예시로 들겠다.

    상황 1. 마린 1개, 탱크 1개

    # 마린 : 공격 유닛, 군인, 총을 사용
    name = "마린"  # 유닛의 이름
    hp = 40  # 유닛의 체력
    damage = 5  # 유닛의 공격력
    
    print("{0} 유닛이 생성되었습니다.".format(name))
    print("체력 {0}, 공격력 {1}\n".format(hp, damage))
    
    # 출력값 :
    # 마린 유닛이 생성되었습니다.
    # 체력 40, 공격력 5
    
    
    # 탱크 : 공격 유닛, 탱크. 포를 쏠 수 있다. 일반 모드 / 시즈 모드
    tank_name = "탱크"
    tank_hp = 150
    tank_damage = 35
    
    print("{0} 유닛이 생성되었습니다.".format(tank_name))
    print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage))
    
    # 출력값 :
    # 탱크 유닛이 생성되었습니다.
    # 체력 150, 공격력 35
    

    상황 2. 공격

    def attack(name, location, damage):
        # name : 어느 유닛이
        # location : 어느 위치로
        # damage : 얼마만큼의 피해를 줄지
    
        print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]"\
            .format(name, location, damage))
    
    attack(name, "1시", damage)
    attack(tank_name, "1시", tank_damage)
    
    # 출력값 :
    # 마린 : 1시 방향으로 적군을 공격합니다. [공격력 5]
    # 탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35]
    

    상황 3. 마린 1개, 탱크 2개

    # 마린
    name = "마린"
    hp = 40
    damage = 5
    
    print("{0} 유닛이 생성되었습니다.".format(name))
    print("체력 {0}, 공격력 {1}\n".format(hp, damage))
    
    
    # 탱크 1
    tank_name = "탱크"
    tank_hp = 150
    tank_damage = 35
    
    print("{0} 유닛이 생성되었습니다.".format(tank_name))
    print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage))
    
    
    # 탱크 2
    tank2_name = "탱크"
    tank2_hp = 150
    tank2_damage = 35
    
    print("{0} 유닛이 생성되었습니다.".format(tank2_name))
    print("체력 {0}, 공격력 {1}\n".format(tank2_hp, tank2_damage))
    
    attack(name, "1시", damage)
    attack(tank_name, "1시", tank_damage)
    attack(tank2_name, "1시", tank2_damage)
    

    문제점 : 실제 게임에서는 탱크가 수십 개인데 매번 만들어주는 것은 무리이다.

    해결책 : 'class'의 사용


    상황 4. n개의 유닛에 대응하기

    # class의 사용
    
    class Unit:
            def __init__(self, name, hp, damage):
                self.name = name
                self.hp = hp
                self.damage = damage
                print("{0} 유닛이 생성되었습니다.".format(self.name))
                print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
    
    # __init__(self, name, hp, damage)에서 self를 제외한 나머지를 적는다.
    # Unit(name, hp, damage)
    
    marine1 = Unit("마린", 40, 5)
    marine2 = Unit("마린", 40, 5)
    tank1 = Unit("탱크", 150, 35)
    
    
    # 출력값 :
    
    # 마린 유닛이 생성되었습니다.
    # 체력 40, 공격력 5
    # 마린 유닛이 생성되었습니다.
    # 체력 40, 공격력 5
    # 탱크 유닛이 생성되었습니다.
    # 체력 150, 공격력 35
    

    __init 함수

    • python에서 쓰이는 생성자
    • class로부터 만들어지는 '객체'들이 만들어질 때 자동으로 호출
    • marine과 tank는 Unit class의 'instance' 라고 표현
    • instance가 생성될 때에는 init 함수의 정의된 개수와 동일하게 정의되어야 한다(self 제외)

    ex)

    marine3 = Unit("마린")
    marine3 = Unit("마린", 40)
    
    사용 불가능!
    

    Reference

    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다