python 파트15. 클래스

reggias·2022년 11월 22일
0

python

목록 보기
14/14

클래스

클래스는 언제 사용할까?

예를 들어, 아주 많은 몬스터들의 HP를 관리해야 하면 어떻게 해야 편할까? 1000마리 이상이라면?

방법1. → 리스트의 순서를 잘 지켜서 각 몬스터들의 hp를 잘 적어둔다.(절차지향)
방법2. → 몬스터마다 각자의 hp를 가질 수 있게 한다.(객체지향)

how to

class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive == True:
            print('살았다')
        else:
            print('죽었다')

m1 = Monster()
m1.damage(150)
m1.status_check()

m2 = Monster()
m2.damage(90)
m2.status_check()
  • 여기서 Monster()를 클래스라고 부르고 m1, m2를 인스턴스라고 부른다.
  • 클래스 : 분류, 집합 같은 속성과 기능을 가진 객체를 총칭하는 개념
  • 객체 : 세상에 존재하는 유일무이한 사물
  • 인스턴스 : 클래스에 의해 생성된 객체
    각자 자신의 값을 가지고 있다.
    ex) 클래스가 사람이면 유재석, 박명수 등이 객체
    ex2) 클래스가 동물이면 강아지, 고양이 등이 객체참고사이트

자세히

class Person: # person을 정의한다.
    pass      # : 이하 클래스에 대한 내용 / pass는 비어있는 클래스를 만들겠다는 의미

person_1 = Person()
person_2 = Person()
# Person : 클래스 Person을 통한 새로운 객체를 만들겠다는 의미
# () : constructor(생성자)라는 의미
# person_1 변수에 Person()이라는 클래스의 객체가 생성이 됨
print(person_1) # <__main__.Person object at 0x000001ED56357D00>
print(person_2) # <__main__.Person object at 0x000001ED56357D30>
# Person object : Person이라는 클래스의 객체가 생성이 되었다.
# 주소값 0x000001ED56357D00 은 객체가 적용되어 있는 일련의 공간이고
# 이 주소를 알려줌으로써 person_1인지 person_2인지 구분할 수 있도록 한다.

# constructor(생성자) : 객체를 생성할 때 쓰는 함수
# 클래스를 만들 때 constructor를 설정하기 위해서는 __init 함수를 만들어야한다.
# (파이썬에서 생성자 함수의 이름은 __init__으로 무조건 고정되어 있다.
class Person:
    def __init__(self):
        print("i am created!", self)

person_1 = Person()
print(person_1)
person_2 = Person()
print(person_2)
# self : python 에서는 constructor 생성하거나 내부함수(__init__ 같은)를 만들 때
# 인자에 자기자신을 넘겨준다. 파이썬 클래스가 알아서 넘겨준다.
# def 안의 print는 언제 실행될까? 클래스를 생성했을 때 내부함수 __init이 만들어져 있었고(constructor가 __init__ 함수와 동일함)
# Person()이 호출되었을 때 만들어져 있던 내부함수가 불리게 되면서 print("i am created!", self)가 실행

# 클래스에 데이터를 저장하기
class Person:
    def __init__(self, param_name):
        print("i am created!", self)
# 데이터를 저장하려면 데이터를 받아야한다.
# 생성자에 받고 싶은데 매개변수(파라미터)를 추가
        self.name = param_name
# 클래스 내부 변수 self.name를 만들어 매개변수 param_name 저장
# self(내 안에) name 이라는 변수를 만들어서 param_name을 저장해두겠다는 의미
# 앞에서 ()가 __init__ 함수가 동일하다했으니 __init에 param_name 변수를 새로 받아야한다.
    def talk(self):
        print("안녕하세요, 제 이름은", self.name, "입니다")

person_1 = Person("유재석") # 그러므로 이름을 넣어본다. 이름을 넣은 후 실행시켰을 때 self에 name이 주입되고
print(person_1.name) # 주입된 것을 보기위해 입력할 코드
print(person_1)
person_2 = Person("박명수")
print(person_2.name)
print(person_2)

# 이름을 보게 된 이유?
# Person 라고 하는 constructor(__init)를 통해 param_name이 클래스 내부 self.name에
# 저장이 되어 self.name을 호출(print)했기 때문에 이름을 볼 수 있게 됬다.

# 새로운 함수 talk 넣어보기 : Person 클래스의 name을 출력하는 함수를 만들어본다.
# 클래스 내부의 함수는 메소드라고 부르고 있음. talk 메소드
person_1.talk() # talk 함수 호출!
person_2.talk()
  • 유사한 행동, 유사한 데이터를 쌓을 수 있는 구조를 쉽게 만들 수 있음.
profile
sparkle

0개의 댓글