4. 파이썬 심화 - 클래스_01
클래스
클래스는 객체(Object)를 표현하기 위한 문법이여 프로그래밍으로 객체를 만들 때 사용하는 것이다.
예를 들어
게임을 만든다고 하면 전사, 법사, 궁수, 암살자 등 직업별로 클래스를 만들어서 표현 가능하다.
기본적으로 게임 캐릭터는 체력(피), 마나, 물리 공격력, 마법 공격력, 방어력 등등이 필요하다.
그리고 전사는 무기를 이용해서 베기, 찌르기 등등의 스킬이 있어야 한다.
자!
클래스의 속성(Attribute) -> 체력(피), 마나, 물리 공격력, 마법 공격력, 방어력
클래스의 메서드(Method) -> 무기를 이용해서 베기, 찌르기 등등의 액션
클래스의 속성과 메서드는 아주 중요하기 때문에 만약 모르겠다면 혹은 감이 안 잡힌다면
다른 예제를 찾아보고 개념을 잘 숙지하는 것을 추천한다.
만약 Car로 예를 들어보면 아래와 같다.
클래스의 속성(Attribute) -> 색상, 연식, 속도, 기어
클래스의 메서드(Method) -> 가속, 감속, 정지, 시동, 기어 변경 (동작)
객체지향 프로그래밍은
복잡한 문제를 잘게 나누어(분해) 객체로 만들고, 객체를 조합(조립)해서 문제를 해결한다.
따라서 복잡한 문제를 해결하는데 유용하며 기능을 개선하고 발전시킬 때도
해당 클래스만 수정하면 되기 때문에 유지보수에도 효율적이다.
※ 참고로 파이썬은 모든 것이 객체이다.
1. 클래스 & 메서드
클래스의 기본 구조
class 클래스이름:
def 메소드(self):
code
# 동일
class 클래스이름(object):
def 메소드(self):
code
사람 클래스 예시
클래스는 특정 개념을 표현, 인스턴스를 생성해야 한다.
class Person:
def Greeting(self): # 메소드(Method)
print('Hello')
Jerry = Person() # 인스턴스(instance)
메서드를 호출은 위의 내용에 Jerry.Greeting()
를 추가하여 실행하면 된다.
메서드는 클래스가 아니라 인스턴스를 통해 호출해야 한다.
인스턴스.메소드()
(인스턴스, 메서드)를 하면 호출 가능하다.
class Person:
def Greeting(self): # 메소드(Method)
print('Hello')
Jerry = Person() # 인스턴스(instance)
Jerry.Greeting()
# 인스턴스 인지 아닌지 확인
isinstance(Jerry, Person) # 객체의 자료형을 판단할때 사용
# OutPut
# >>> 'Hello'
# >>> True
인스턴스와 객체의 차이는 유사 하하다.
인스턴스를 클래스와 연관을 지어서 말을 할 경우 객체를 인스턴스라고 말한다.
그 외의 보통 객체라면 그냥 객체라고 보면 될 것 같다.
나도 아직은 많이 어려운 개념이라 조금 더 자세하게 알아보고 이 부분만 상세하게 리뷰 하도록 하겠다.
메서드 안에서 메서드를 호출도 가능하다.
class Person:
def greeting(self):
print('hello')
def Hello(self):
self.greeting() # self.메소드() -> 클래스 안의 메소드를 호출
Jerry = Person()
Jerry.Hello()
# OutPut
# >>> 'Hello'
2. 속성(Attribute)
속성(attribute)을 만들 때에는 __init__
메서드 안에서 self.속성
에 값을 담는다.
# 이렇게
class 클래스이름:
def __init__(self):
self.속성 = 값
# 생성자 : 객체를 생성, 초기화(옵션)
__init__
(Initialize)는 인스턴스를 만들 때 호출되는 특별한 메서드이다.
그리고 인스턴스를 초기화한다.
self
는 인스턴스 자기 자신을 의미하며 인스턴스가 생성될 때 자기 자신에 속성을 부여한다.
class Person:
def __init__(self):
self.hello = '안녕!' # 속성 생성
def Greeting(self):
print(self.hello) # 속성 사용
Jerry = Person()
Jerry.Greeting()
# Output
# >>> '안녕!'
클래스로 인스턴스를 만들 때 값을 받는 방법은
__init__
메서드를 이용해서 self
에 매개변수를 지정한 후
속성을 부여하면 값을 받을 수 있다.
class 클래스이름:
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
요렇게!!
위의 예제를 활용해서 매개변수를 추가해보면 아래와 같다.
class Person:
"""
매개변수 : self, 이름, 나이, 주소
"""
def __init__(self, name, age, address):
self.hello = '안녕!'
self.name = name # self에 넣어서 속성으로 만듦
self.age = age
self.address = address
def Greeting(self):
# print('{0} 나는 {1}야!'.format(self.hello, self.name))
print(f'{self.hello} 나는 {self.name}야!')
Joy = Person('조이', 30, '인천' ) # 인스턴스 생성
Joy.Greeting()
print('이름:', Joy.name) # 외부에서 인스턴스에 접근 할 경우
print('나이:', Joy.age) # 인스턴스.속성 형식으로 접근 -> 인스턴스 속성
print('주소:', Joy.address)
# Output
# >>> 안녕! 나는 조이야!
# >>> 이름: 조이
# >>> 나이: 30
# >>> 주소: 인천
매개변수는 말 그대로 변수이지만
어떠한 매개체를 이용해서 변수로서 역할을 한다고 보면 될 것 같다.
그 매개체가 클래스 자기 자신인 거고
3. 비공개 속성 (Private attribute )
Person 클래스에는 hello, name, age, address 속성을 활용해서
클래스 외부에서는 접근이 불가하고 내부에서만 사용 가능한 비공개 속성에 대해서 알아보자 !
비공개 속성은 __속성
과 같이 (__
)로 만들어져야 한다.
__속성
과 __속성__
은 다르다.
비공개 속성은 클래스 외부에 드러내고 싶지 않은 값을 다룰 때 사용한다.
중요한 값일 경우 더더욱 외부에 공개되서는 안 될 때 비공개 속성을 사용한다.
기본 구조는 아래와 같다.
class 클래스이름:
def __init__(self, 매개변수)
self.__속성 = 값
이전에 했던 실습에 활용해보면
class Person:
"""
매개변수 : self, 이름, 나이, 주소
비공개속성 : 지갑
"""
def __init__(self, name, age, address, wallet):
self.hello = '안녕!'
self.name = name # self에 넣어서 속성으로 만듦
self.age = age
self.address = address
self.__wallet = wallet # __를 붙여서 비공개 속성
def Greeting(self):
# print('{0} 나는 {1}야!'.format(self.hello, self.name))
print(f'{self.hello} 나는 {self.name}야!')
def pay(self, amount):
if amount > self.__wallet:
print('금액 부족')
return
self.__wallet -= amount # 1. 비공개 속성은 클래스 안의 메소드에서만 접근가능
print(f'잔여 금액 : {self.__wallet}원')
Joy = Person('조이', 30, '인천', 500000 ) # 인스턴스 생성
# Joy.__wallet # 비공개 속성이라 외부에서 접근 불가능 -> 에러발생
Joy.pay(3900)
# Output
# >>> 잔여 금액 : 496100원
아직은 언제 어느 때에 써야 할지 잘 모르겠지만 꽤나 유용해 보인다.
Reference
- 파이썬 코딩도장 : https://dojang.io/
'Programming > Python' 카테고리의 다른 글
[ Python_심화 ] 5. 클래스 활용 (0) | 2020.06.27 |
---|---|
[ Python_심화 ] 4. 클래스_02 (0) | 2020.06.27 |
[ Python_심화 ] 3. 클로저(Closure) (0) | 2020.06.25 |
[ Python_심화 ] 2. 변수 (0) | 2020.06.25 |
[ Python_심화 ] 1. 재귀호출 (0) | 2020.06.25 |