처음 프로그래밍을 시작한 학생에게 class는 왜 쓰는가에 대한 고민이 있을것이다.
초보가 혼자서 코드를 만들 땐 생각보다 class는 안쓰고 전부 하드 코딩과 함수로만 만드는 경향이 있다.
많은 책이 "class는 붕어빵 찍는 기계다" 라고 설명한다.
하지만 별로 와닿지 않는다
난 좀 더 친근하고 접근성 있게 민속놀이 스타크래프트로 접근해보고자 한다.
1. class로 찍어낼 것 정하기
스타크래프트의 모든 병력은 "유닛" 이라고 불린다.
하드 코딩으로 마린 유닛 1개와 움직이는 함수를 만들어 보자
# 1번 마린
marine_hp = 40
marine_attack = 5
marine_armor = 0
marine_location=[0,0]
# 마린 이동 명령
def move(x,y, location):
marine_location[0]+=x
marine_location[1]+=y
# 마린이동
print(f"marine1 location is {marine_location}")
move(1,2,marine_location)
print(f"marine1 moved now {marine_location}")
마린의 체력 공격력 방어력 그리고 위치를 변수로 만들었다.
이후 move 함수를 통해 마린의 위치를 이동시킬수 있게 만들었다
# 결과
marine 1 location is [0, 0]
marine 1 moved now [1, 2]
마린1이 [0,0] 에서 [1,2] 로 정상적으로 움직였다.
하지만 만약 마린이 100마리라면 어떻게 해야할까?
위의 방식대로라면 다음과 같이 코드를 만들어야 하는데 이는 너무 노가다가 심하다.
또한 실수로 수치를 잘못입력해 빈약한 마린 혹은 투머치 강력한 마린이 잘못 만들어 질 수 도 있다.
# 1번 마린
marine_hp = 40
marine_attack = 5
marine_armor = 0
marine_location=[0,0]
# 2번 마린
marine2_hp = 40
marine2_attack = 5
marine2_armor = 0
marine2_location=[0,0]
자 여기서 클래스가 필요하다.
클래스는 배럭과 같다! 하지만 진짜 배럭이 아니다 붕어빵 기계로 묘사를 하는 이유를 우린 보게 될 것이다.
class Marine:
marine_hp = 40
marine_attack = 5
marine_armor = 0
m1 = Marine
print(m1.marine_hp)
print(m1.marine_attack)
print(m1.marine_armor)
# 결과
40
5
0
Class를 이용해서 m1이라는 마린 객체의 인스턴스(Marine class를 통해 만든 객체) 1번 마린을 만들었다.
이를 통해 우리는 실수없이 정확한 마린을 만들수 있게 되었다!
그런데...
만약 파이어뱃을 만들고 싶다면 어떻게 해야할까?
Class파이어뱃을 만들면 될까?
똑같이 class를 만들면 되지라고 생각할 것 이다.
그런데 마린이랑 파이어뱃의 차이가 뭘까?
위에서는 체력, 공격력, 방어력만 정의 했지만 실제에선 소형인지 중형인지 아니면 대형인지? 도트는 어떻게 되있는지, 목소리는? 생산될때 속도는? 전부 다르게 정의 할것이다.
하지만 움직이는것은 마린이랑 같다.
다른것도 할게 많은데 귀찮은 개발자가 또 움직임을 정의 할까?
이 문제에 대한 답은 다음 글에서 하겠다.
'python' 카테고리의 다른 글
[FastAPI] restapi를 위한 코드 순서 (0) | 2024.09.26 |
---|---|
poetry add 혹은 pipenv install 무한로딩 (0) | 2024.05.08 |
class 적응하기 2 (0) | 2024.01.30 |
Class method vs Static method in python (2) | 2024.01.03 |
동기(sync)&비동기(async) (2) | 2023.12.22 |