객체 지향 프로그래밍에 대해서 알아보도록 하겠습니다
객체 지향 프로그래밍은 객체를 사용해서 프로그래밍을 짜는 것입니다.
그렇다면 객체에 대해서 알아야합니다.
객체는 속성과 행동을 가지고 있는 것들을 의미하는데요. 예를 들어 게임 캐릭터들끼리 싸우는 코드를 만들 때 다음과 같이 만들 수 있습니다.
# 캐릭터1 설정
user1_name = "코딩"
user1_hp = 100
user1_mp = 200
user1_skill1 = 10
user1_skill2 = 20
# 캐릭터2 설정
user2_name = "발록"
user2_hp = 500
user2_mp = 250
user2_skill1 = 5
user2_skill2 = 7
# 서로 한 대씩 주고 받기
user2_hp -= user1_skill1
user1_hp -= user2_skill2
그런데 실제 게임 속에서는 많은 수의 유저들이 있습니다. 그리고 각 유저들은 공통적인 속성과 행동들이 보입니다. 조금 더 자세하게는 각 캐릭터의 직업에 따라서 공통적인 특징들이 있는 것이죠
이런 공통적인 특징들을 하나로 묶는데 속성 값은 다를 수 있겠죠? 어떤 유저는 레벨이 10 어떤 유저는 레벨이 250 이렇게 말이에요
그래서 class 라는 녀석을 이용하면 여러 유저들(객체)를 생성하면 하나의 코드로 다른 여러 명을 생성할 수 있습니다.
이런 식으로 코드를 작성하는 방법의 장점은 유지 보수가 쉽고, 코드가 간결해지며, 쉬워지는 특성이 있습니다. 물론 클래스 문법을 안다는 상황에서 말하는 내용입니다. 모르면 유지 보수가 쉬운지 코드가 쉬운지 알 수가 없죠
그래서 클래스 문법에 대해서 쉽게 이야기 해보려고 합니다.
지금 위의 코드 상에는 두 명의 유저가 있는데요 각 유저들은 이름/체력/마나/어떤 스킬 이라는 공통적인 특징들이 있습니다. 아까 유저들이 객체라고 이야기 했고, 객체는 속성과 행동을 가지고 있다고 했고, 객체는 class로 만든다고 이야기 했습니다. 클래스를 만들기 위해서는 유저에서 속성과 행동을 분리해야합니다.
속성 : 이름 / 체력 / 마나
행동 : 스킬 사용하기
속성과 행동을 분리해야 클래스를 정의할 수 있고 그에 따라 객체(유저)도 올바르게 생성할 수 있습니다.
때문에 간단한 클래스를 만들어보고 이야기해보겠습니다.
class Player:
def __init__(self, name, hp, mp):
"""플레이어 생성 후 초기값 셋팅하는 함수"""
self.name = name
self.hp = hp
self.mp = mp
def skill1(self, you):
"""스킬 1 데미지는 10"""
you.hp -= 10 # 상대방 체력 10 깎았음
self.mp -= 50 # 마나 50 소모
print(f"{you.name}의 체력이 10 줄었습니다. 현재 체력{you.hp}")
def skill2(self, you):
"""스킬 1 데미지는 10"""
you.hp -= 120 # 상대방 체력 10 깎았음
self.mp -= 100 # 마나 50 소모
print(f"{you.name}의 체력이 120 줄었습니다. 현재 체력{you.hp}")
# 캐릭터 생성
p1 = Player("인성패밀리", 2000, 15000)
p2 = Player("적군", 5000, 7000)
# 스킬을 써보자
p1.skill1(p2)
p2.skill2(p1)
-> 클래스를 생성할 때의 간단한 규칙으로 클래스의 이름의 첫 글자는 대문자로 작성하기로 약속이 되어있습니다. 때문에 가장 첫 줄에 Player의 첫 글자가 대문자입니다.
-> 두 번째 줄이 캐릭터를 처음 만들었을 때 캐릭터 초기 생성하는 함수입니다. 클래스에서 정의된 함수를 method라 부릅니다. 언더 바(_)가 붙은 이들은 조금 특별한 기능을 가지고 있는 메소드인데요 우선 __init__은 이름을 부를 때 init 메소드라고 이름을 부릅니다. 이 메소드는 객체가 처음 생성되면 변수들을 초기화 시키는 역할을 합니다.
-> init 메소드에서 정의된 변수 더 정확히는 self가 붙은 변수들은 인스턴스 변수라고 부릅니다. 바로 이 인스턴스 변수가 객체의 속성을 나타냅니다.
-> self라는 키워드가 자주 등장하는 것을 볼 수 있는데 self의 의미는 자기 자신을 의미합니다.
-> 때문에 skill1 메소드에서 you의 hp는 상대방의 hp를 말하고, self.mp는 나의 mp를 의미합니다. you는 매개변수로 받은 것이라 이것은 변수 이름이 바뀌면 바뀝니다.
각 문법에 대해서는 조금 더 자세하게 설명이 들어갈 것이며 이번 포스팅은 대략적인 내용들입니다.
오늘의 핵심으로 코드를 통해서 클래스에서 쓰이는 용어에 대해서 알아보겠습니다.
class Player:
def __init__(self, name, hp, mp): ## 생성자
"""플레이어 생성 후 초기값 셋팅하는 함수"""
self.name = name ## 인스턴스 변수
self.hp = hp ## 인스턴스 변수
self.mp = mp ## 인스턴스 변수
def skill1(self, you): ## 메소드
"""스킬 1 데미지는 10"""
you.hp -= 10 # 상대방 체력 10 깎았음
self.mp -= 50 # 마나 50 소모
print(f"{you.name}의 체력이 10 줄었습니다. 현재 체력{you.hp}")
def skill2(self, you): ## 메소드
"""스킬 1 데미지는 10"""
you.hp -= 120 # 상대방 체력 10 깎았음
self.mp -= 100 # 마나 50 소모
print(f"{you.name}의 체력이 120 줄었습니다. 현재 체력{you.hp}")
# 캐릭터 생성
p1 = Player("인성패밀리", 2000, 15000) ## 인스턴스
p2 = Player("적군", 5000, 7000) ## 인스턴스
# 스킬을 써보자
p1.skill1(p2)
p2.skill2(p1)
## 을 통해서 각 부분이 어떤 용어로 불리는지 표시해두었습니다.
각 용어의 간단한 의미입니다.
생성자 : 객체를 만들때 초기값 셋팅
인스턴스 변수 : 객체의 속성
메소드 : 객체의 행동 함수로 만든다
인스턴스 : 클래스를 통해 만든 객체
'프로그래밍 > 파이썬 문법' 카테고리의 다른 글
호기심 파이썬 : 메소드 (메소드 만드는 법 / 파이썬 클래스 메소드 / 스택을 구현해보자!) (0) | 2022.12.02 |
---|---|
호기심 파이썬 : 클래스 (생성자 / 인스턴스 생성 후 초기화 / 인스턴스 변수 접근 / 접근 지정자) (0) | 2022.11.30 |
호기심 파이썬(함수 사용법 2탄 : **kargs, 나를 다시 호출하는 재귀함수) (0) | 2022.07.03 |
호기심 파이썬(함수 1탄 : 함수 만들기, 여러 개 입력받기*args) (0) | 2022.05.13 |
호기심 파이썬 ( 변수 이름 만들기 ) (0) | 2022.05.12 |
댓글