Python

[Python 독학] 클래스 ①

みずき 2021. 7. 7. 14:39

클래스와 객체

클래스객체를 만들기 위한 설계도,

객체설계도로부터 만들어낸 제품이라고

보면 된다. 예시를 들어보자면 클래스가 빵틀,

객체가 빵틀로 구워낸 빵이라고 생각하면 된다.

 

그리고 중간에 '인스턴스'라는 말이 나올텐데

클래스로 만든 객체를 인스턴스라고 한다.

주로 특정 객체가 어떤 클래스의 객체인지

관계 위주로 설명할 때 사용한다.

Ex :

a = Cookie()

이것을 보고

a는 Cookie의 인스턴스

라고 할 때 사용한다.

 

클래스가 필요한 이유는 자료의 양이 많아지면

많아질수록 두드러진다. 클래스를 이용하면

코드의 길이가 확연히 줄고, 수정이 용이해지기 때문이다.

# 클래스를 사용하지 않은 경우
champion1_name = "이즈리얼"
champion1_health = 700
champion1_attack = 90

print(f"{champion1_name}님 소환사의 협곡에 오신것을 환영합니다.")

champion2_name = "리신"
champion2_health = 800
champion2_attack = 95

print(f"{champion2_name}님 소환사의 협곡에 오신것을 환영합니다.")

def basic_attack(name, attack):
    print(f"{name} 기본공격 {attack}")

basic_attack(champion1_name, champion1_attack)
basic_attack(champion2_name, champion2_attack)

print("==========클래스를 사용한 경우==========")

# 클래스를 사용한 경우
class Champion:
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack
        print(f"{name}님 소환사의 협곡에 오신 것을 환영합니다.")
    def basic_attck(self):
        print(f"{self.name} 기본공격 {self.attack}")

ezreal = Champion("이즈리얼", 700, 90)
leesin = Champion("리신", 800, 95)
ezreal.basic_attack()
leesin.basic_attack()

__init__와 f string은 나중에 설명.

여기서 캐릭터 하나를 더 추가하고 싶다고 하면

# 클래스를 사용하지 않은 경우
champion1_name = "이즈리얼"
champion1_health = 700
champion1_attack = 90

print(f"{champion1_name}님 소환사의 협곡에 오신것을 환영합니다.")

champion2_name = "리신"
champion2_health = 800
champion2_attack = 95

print(f"{champion2_name}님 소환사의 협곡에 오신것을 환영합니다.")

champion3_name = "야스오"
champion3_health = 750
champion3_attack = 92

print(f"{champion3_name}님 소환사의 협곡에 오신것을 환영합니다.")

def basic_attack(name, attack):
    print(f"{name} 기본공격 {attack}")

basic_attack(champion1_name, champion1_attack)
basic_attack(champion2_name, champion2_attack)
basic_attack(champion3_name, champion3_attack)

print("==========클래스를 사용한 경우==========")

# 클래스를 사용한 경우
class Champion:
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack
        print(f"{name}님 소환사의 협곡에 오신 것을 환영합니다.")
    def basic_attck(self):
        print(f"{self.name} 기본공격 {self.attack}")

ezreal = Champion("이즈리얼", 700, 90)
leesin = Champion("리신", 800, 95)
yasuo = Champion("야스오", 750, 92)
ezreal.basic_attack()
leesin.basic_attack()
yasuo.basic_attack()

기존의 경우 5줄을 더 추가해야하지만

class를 이용하면 단 2줄만 추가하면 된다.

그러니 추가해야할 데이터의 수가 늘면

늘수록 속도면에서, 코드의 길이 면에서

클래스를 이용한 것이 훨씬 좋을 수밖에 없다.

 

 

클래스⊃ 속성(특징) & 메서드

방금 예시로 든 코드를 적용하면

속성체력(health), 공격력(attack), 방어력 따위이고,

메서드위치로 이동하기, 공격하기, 아이템 사용하기

등을 예시로 들 수 있다.

 

메서드(Method)

클래스 안에 구현된 함수를 말한다.

파이썬 메서드는 첫 번째 매개변수 이름을

관례적으로 self를 사용한다. (꼭 self일 필욘X)

이에 대해선 다음에 조금 더 자세히 나올 것이다.

 

 

클래스 만들기

class 클래스이름:
	def메서드이름(self):
    	명령블록

클래스 사용하기 - 호출하기

인스턴스=클래스이름()
인스턴스.메서드()

형식은 이렇지만 처음봤을 땐

무슨 소리인가 싶다.

예시를 보면 다음과 같다.

class Monster:
    def say(self):
        print("나는 몬스터다!")

# 클래스 호출하기
goblin = Monster()
goblin.say()

그럼 '나는 몬스터다!'라는

결괏값이 출력된다.

a = 10
b = "문자열객체"
c = True

print(type(a))
print(type(b))
print(type(c))

>>>
<class 'int'>
<class 'str'>
<class 'bool'>

그리고 참고로 파이썬에서는

자료형도 클래스이다.