※ 이 글을 쓰는 사람은 SW 비전공자입니다.
※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다.
2021.03.14 - [코딩/Python] - [Python/파이썬] Class(클래스) 기초 정리 - 1 : 개념, 사용법
2021.03.20 - [코딩/Python] - [Python/파이썬] Class(클래스) 기초 정리 - 2 : has-a 관계, 상속 개념
2021.03.21 - [코딩/Python] - [Python/파이썬] Class(클래스) 기초 정리 - 3 : 다중상속, super().__init__(), 메서드 오버라이딩
2021.03.22 - [코딩/Python] - [Python/파이썬] Class(클래스) 기초 정리 - 4 : 추상 클래스, 클래스 변수
2021.03.27 - [코딩/Python] - [Python/파이썬] Class(클래스) 메서드 self 설명
pyqt GUI를 구성하려고 다른 사람들의 코드를 많이 참고하고 있는데 기초가 부족해서 이해하기가 어려워 작성하는 포스팅. 지금까지는 절차 지향적인 코드만 짜와서 앞으로는 코드를 효율적으로 작성하기 위해서 클래스를 사용해보려고 한다. 이번 글은 파이썬 클래스의 기초적인 개념, 사용법과 문법에 대해 정리하였다.
1. Class(클래스) 란?
주로 '객체 지향 프로그래밍'을 위해 필요한 개념이다. 주로 알고 있는 C/C++/파이썬 등 모두 기본적인 코딩 방법은 절차 지향 방식이다. 절차 지향은 말그대로 절차(순서)대로 코드를 작성하는 방식.
그 중에서도 C++과 파이썬은 Class라는 개념이 있어 '객체 지향 프로그래밍'이 가능하다. 주로 Class를 예시로 드는 것이 게임의 '아이템' 개념인 것 같다. 예를 들어, RPG 게임에는 공격, 방어할 수 있는 여러 아이템들이 있다. 이 분류에는 무기, 갑옷, 장신구, 신발 등이 있고 각각 아이템 분류 속에서도 또 다른 분류가 존재한다. 무기에서 상세적으로 분류해보면 칼, 총, 지팡이, 도끼 등이 있고 또 이 분류 속에서도 착용시 상승 능력치가 다른 여러 아이템들이 있다. 이 아이템들은 각각 무기의 공통적인 속성과 그 아이템만의 스킬, 특수효과 등 속성을 가지게 된다.
클래스는 큰 틀을 이야기 한다. 큰 틀로 보면 무기, 갑옷, 장신구, 신발이라는 클래스가 있다고 생각할 수 있다. 각각의 클래스마다 고유의 특성들이 있을 것이다. 무기는 '공격', 갑옷은 '방어' 등을 말한다.(=속성 또는 메소드) 무기에는 도끼, 칼, 총 등 여러 분류가 있고 각 종류의 무기들은 무기의 공통적인 특성을 가지고 있다.(=상속)
무기 Class를 예시로 간단히 도식화 해보았다. 맞게 그렸는지는 잘모르겠으나 내가 이해하기론 이렇다. 무기, 무기종류 2분류로 간략하게 그렸지만 Sword, Gun도 클래스로 설정하여 아이템을 세부 구분할 수 있다.(장검, 단검 등 여러 종류로 나눌 수 있음)
하위 클래스는 상위 클래스의 속성을 가질 수 있는 것이다.(상속 개념)
2. 파이선 Class(클래스) 기본 사용법
1) Class 정의하기
-. 정의하는 부분은 어렵지 않아 설명을 주석으로 대신한다.
# 무기 클래스 정의
class Weapone():
pass
#'무기' 클래스 객체 '칼'을 생성해보기"
sword = Weapone()
print(type(sword))
<결과>
<class '__main__.Weapone'>
Process finished with exit code 0
2) Class 내부 변수 설정하기
-. Class 내부 변수 설정 후 해당 Class의 객체를 생성하면 그 객체는 해당 변수값을 그대로 갖는다.
# 무기 클래스 정의
class Weapone():
power = 10
strength= 20
#'무기' 클래스 객체 sword을 생성해보기"
sword = Weapone()
#생성된 sword 객체를 통해 내부 변수에 접근하기
print("공격력 : ",sword.power)
print("착용시 근력증가 :",sword.strength)
<결과>
공격력 : 10
착용시 근력증가 : 20
Process finished with exit code 0
3) Method 정의하고 호출하기
-. Method는 Class 내부의 함수를 말한다. 해당 클래스의 객체를 생성하면 객체는 클래스의 함수(메소드)를 사용할 수 있다.
-. Class 내부 함수(method) 정의할 때 첫번째 인수는 무조건 self로 지정해야 함을 주의하자!
-. self를 통해 Class 내부 변수에 접근할 수 있다.
# 무기 클래스 정의
class Weapone():
power = 10
strength= 20
def attack1(self):
print("공격력"+str(self.power)+"으로 찌르기")
def attack2(self):
print("근력"+str(self.strength)+"으로 던지기")
#'무기' 클래스 객체 sword을 생성해보기"
sword = Weapone()
#생성된 sword 객체를 통해 내부 변수에 접근하기
print("칼로 할 수 있는 것 1")
sword.attack1()
print("칼로 할 수 있는 것 2")
sword.attack2()
<결과>
칼로 할 수 있는 것 1
공격력10으로 찌르기
칼로 할 수 있는 것 2
근력20으로 던지기
Process finished with exit code 0
4) 초기화 메서드 def __init__(self) 이해하기
-. Class를 사용한 코드들을 보면 대부분 def __init__(self)이라는 부분을 많이 사용한다.
-. def __init__ 이라는 class 함수는 초기화 메서드 또는 생성자 또는 초기화 함수라고 부른다
-. Class를 호출하면 무조건 실행되는 함수라고 보면 된다.
# 무기 클래스 정의
class Weapone():
#초기화 메서드
def __init__(self, what, power, action):
print("무기종류 : ",what)
print("공격력 : ",power)
print("기능 : ",action)
#sword 라는 객체 생성
sword = Weapone("Sword", "10", "찌른다")
#gun 이라는 객체 생성
gun = Weapone("Gun", "20", "쏜다")
<결과>
무기종류 : Sword
공격력 : 10
기능 : 찌른다
무기종류 : Gun
공격력 : 20
기능 : 쏜다
Process finished with exit code 0
-. 위와 같이 클래스에 인수를 전달해서 각 객체마다 내부 속성값을 다르게 설정할 수 있다.
-. 이 설정한 속성값을 활용해 내부 함수(method)에 활용할 수 있다.
-. 그래서 예시 코드를 추가로 짜보았다.
# 무기 클래스 정의
class Weapone():
#초기화 메서드, 인수2개 전달(어떤 무기인지, 공격력)
def __init__(self, what, power):
self.what_weapone = what
self.power_num = power
#클래스 내부 메소드 구문 : 초기화 메서드에서 설정한 클래스 변수들 사용
def action1(self):
print(self.what_weapone+"은 공격력"+self.power_num+"으로 찌른다")
def action2(self):
print(self.what_weapone+"은 공격력"+self.power_num+"으로 쏜다")
#무기 Class의 객체 sword 생성
sword = Weapone("Sword", "10")
sword.action1()
#무기 Class의 객체 gun 생성
gun = Weapone("Gun", "20")
gun.action2()
<결과>
Sword은 공격력10으로 찌른다
Gun은 공격력20으로 쏜다
Process finished with exit code 0
-. 주석을 보면 이해를 쉽게할 수 있음.
-. 클래스 선언시 2개 인수 what, power를 통해 초기화 메서드(__init__)에서 초기값을 설정할 수 있다.
-. def__init__으로 선언하여 다른 메소드에서 self.변수이름을 통해 접근가능하다.
-. 객체 인수값을 다르게 설정하면 같은 클래스를 가지지만 다른 속성값을 가진 객체가 된다.
※ 클래스 메서드의 Self 이해하기
클래스 메서드의 Self를 이해하기 위해 아래와 같이 도식화 해보았다. 간단히 설명하면 클래스의 속성을 가지는 객체가 self라고 생각하면 된다. 아래 그림처럼 Weapone 클래스의 인스턴스 sword는 메서드를 호출하거나 또는 속성값을 호출 할 때 클래스 내부에서 self로 대체된다.(클랫에서 객체명을 받는 변수같은 것이라고 이해함.)
self의 이해를 돕기 위해 추가 포스팅 정리
2021.03.27 - [코딩/Python] - [Python/파이썬] Class(클래스) 메서드 self 보충 설명
-. 그 밖에 __del__ 메서드(소멸자), __repr__ 메서드(프린팅), __cmp__ 메서드(비교) 여러 메서드가 있는데 아래 참고 링크를 걸어둠. 나중에 필요할 때 참고(위키독스 - '왕초보를 위한 파이썬')
-. has-a 관계, 상속 관계 등은 다음 편에서 정리 예정.
참고자료1 : 아무튼 워라벨 hleecaster.com/python-class/
참고자료2 : 위키독스 - '점프투파이썬' wikidocs.net/28
참고자료3 : 위키독스 - '왕초보를 위한 파이썬' wikidocs.net/8
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬] Class(클래스) 메서드 self 설명 (0) | 2021.03.27 |
---|---|
[Python/파이썬] Class(클래스) 기초 정리 - 4 : 추상 클래스, 클래스 변수 (0) | 2021.03.22 |
[Python/파이썬] Class(클래스) 기초 정리 - 3 : 다중상속, super().__init__(), 메서드 오버라이딩 (0) | 2021.03.21 |
[Python/파이썬] Class(클래스) 기초 정리 - 2 : has-a 관계, 상속 개념 (0) | 2021.03.20 |
[Python/파이썬] PyQT5 및 QT Designer 소개, .ui 파일 .py로 변환 방법 (0) | 2021.03.06 |