본문 바로가기
부트캠프TIL, WIL/AI웹개발(스파르타코딩클럽)

[AI 웹개발TIL][14일차 TIL]"파이썬 - 턴제 게임" 개념이해

by 우지uz 2023. 4. 3.

  • TIL 목차
  1. class 와 객체, 인스턴스에 대한 설명
  2. class 내에서 __init__(self) 함수에 대한 설명
  3. 클래스 상속에 대한 설명

 

1. class, object, instance란?

Class란 비슷한 속성을 가진 객체들을 찍어내는 틀이라고 생각하면 된다.
예를 들면, 몬스터, 플레이어들은 이름, 체력, 마나, 공격이라는 걸 공통적으로 한다.
모든 플레이어와, 모든 몬스터들의 정보들을 하나하나 입력한다면 
엄청난 양의 데이터가 생길 것인데

students = {}
name, age, gender, level, grades = "name", "age", "gender", "level", "grades"
john, jane = "john", "jane"
math = "math"
students[john] = {}
students[john][age] = 12
students[john][gender] = "male"
students[john][level] = 6
students[john][grades] = {math:3.3}

클래스라는 "틀"을 사용하면 

class Student(object):
    def __init__(self, name, age, gender, level, grades=None):
        self.name = name
        self.age = age
        self.gender = gender
        self.level = level
        self.grades = grades or {}

    def setGrade(self, course, grade):
        self.grades[course] = grade

    def getGrade(self, course):
        return self.grades[course]

    def getGPA(self):
        return sum(self.grades.values())/len(self.grades)

john = Student("John", 12, "male", 6, {"math":3.3})
jane = Student("Jane", 12, "female", 6, {"math":3.5})

존과 제인 뿐만아니라 많은 학생들의 정보들을 쉽게 만들어 낼 수 있다. 

여기서 클래스를 사용해서 만든 오브젝트(Object)를 인스턴스(instance)라고 부른다.
모든 오브젝트를 우리 말로 객체라고 부르지만
여기서 인스턴스는 클래스를 사용해서 만든 변수로, 지향하고자 하는 바가 다르다. 

이것을 

턴제 게임 만들기를 개인 과제 받았다. 
자세한 내용은 아래에 있는 링크에 담았다. 
https://ksw4060.tistory.com/37

2. class 내에서 init 함수란?

유닉스 기반 컴퓨터 운영 체제에서 init은 컴퓨터 시스템의 부팅 과정 중 최초의 프로세스이다.
Init은 시스템이 종료될 때까지 계속 실행하는 
데몬 프로세스이다.
다른 모든 프로세스의 직간접 
부모 프로세스이며 자동으로 고아 프로세스들을 입양한다.
Init은 
하드 코딩 파일 이름을 이용하여 커널에 의해 시작된다.
커널이 이를 시작할 수 없으면 
커널 패닉이 발생한다.
Init은 일반적으로 
프로세스 식별자 1로 할당된다.

쉽게 말하면, 부모 클래스에서 무조건 적으로 입력값을 받아오는 기본 속성들이다. 
이 값들은 부모클래스로부터 상속받는 모든 클래스에게 적용되는 속성함수이고
내가 풀었던 턴제 게임에서는 
플레이어와 몬스터 두개의 클래스 모두 name, hp, power를 공통적으로 받고 
상태를 표시하는 함수 status 및 일반 공격함수 또한 
두 클래스 모두 공통적으로 가지고 있는 속성이다. 

그렇기 때문에 부모 클래스의 init 함수에 변수값으로, 속성값으로 저장되어 있다. 

https://ko.wikipedia.org/wiki/Init

 

init - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

3. 클래스 상속이란

일단 객체 지향 프로그래밍에 대한 지식이 먼저인 것 같다. 
https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

위에서 init 함수를 설명 할 때 말했듯이, 
플레이어, 몬스터 뿐만아니라 공통적인 속성값을 받아와야 하는 여러 클래스들에 대해서
하나하나 일일이 속성값을 저장할 필요가 없이 
부모 클래스라는 큰 틀로 기본 속성값들을 저장하게 해주는 고마운 툴이다

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목

ko.wikipedia.org