본문 바로가기
IT 와 Social 이야기/Python

[데이터 사이언스 스쿨] 2.12 파이썬 객체지향 프로그래밍 2

by manga0713 2021. 3. 18.

클래스(class):

객체지향 프로그래밍에서 객체를 만들려면 객체를 바로 만들지 못하고 항상 클래스(class)라는 것을 만든 후에 그 클래스를 이용하여 객체를 만들어야 한다.

 

전 회에서 만들어 놓은 Rectangle 클래스로 다음과 같이 5개의 사각형을 만들 수도 있다.

 

 

클래스를 정의하는 문법은 다음과 같다.

 

이때 속성값 인수는 필요하지 않다면 없어도 된다. 여기에서 class 블럭 안에 정의된 __init__란 함수는 생성자(constructor)라고 하며 클래스 정의에서 가장 중요한 함수이다.

 

객체를 생성할 때는 클래스이름을 함수처럼 호출해야 하는데, 이때 실제로는 __init__로 정의된 생성자 함수가 호출된다. 생성자 함수 내부에서는 생성자를 호출할 때 넣은 입력 변수, 즉 인자의 값을 속성값으로 저장한다.

 

게임 캐릭터의 속성과 메서드에 대한 클래스 만들기:

 

캐릭터의 능력치, 경험치 등의 숫자는 캐릭터마다 다르게 관리되어야 하므로 객체의 속성이 될 수 있다. 또한 모든 캐릭터 조작에 공통적으로 필요한 이동, 공격 등의 조작은 메서드로 구현할 수 있을 것이다.

  • 플레이어의 캐릭터
  • 속성: 캐릭터의 능력치, 경험치 등
  • 메서드: 캐릭터를 움직이는 방법, 이동, 공격 등

이를 기반으로 캐릭터를 만들어내는 Character라는 클래스를 만든다. 이 클래스로 만든 캐릭터는 1,000이라는 life 속성값을 가지고 생성되며 게임상에서 공격받을 때는 attacked라는 메서드가 호출되어 life 속성값을 10만큼 감소시키고 공격받았음을 표시한다.

 

 

만약 전사(Warrior), 마법사(Wizard) 등 다양한 직업을 가진 캐릭터가 있고, 각 캐릭터는 서로 다른 초기 속성값을 가지고 태어난다면 어떻게 프로그램해야 할까?

 

직업 캐릭터를 별도의 클래스로 만들어도 되겠지만, 클래스 상속을 사용하면 이미 만들어진 클래스 코드를 재사용하여 다른 클래스를 생성할 수 있다.

 

Character 부모 클래스에서 상속을 통해 Warrior 라는 자식 클래스와 Wizard 라는 자식 클래스를 만든다 상속을 위한 파이썬 문법은 다음과 같다.

 

 

 

부모 클래스, 전사 캐릭터 클래스, 마법사 캐릭터 클래스에 공통으로 attack이라는 메서드가 있지만, 각각 공격 방법이 다를 때("공격", "육탄 공격", "마법 공격" 등)는 메서드 오버라이딩(Method Overriding: 여러 클래스에 걸쳐서 같은 이름의 메서드를 만드는 것)

 

 

 

- 출처: [데이터 사이언스 스쿨] 2.12 파이썬 객체지향 프로그래밍 2