안녕하세요 이승혁입니다.
이번 포스팅은 객체 지향 언어의 핵심인 클래스와 객체에 대해 실습을 진행해 보도록 하겠습니다.
※ 객체 지향 언어 vs 절차 지향 언어
객체 : 객체라는 것 주변에 보이는 사물, 생명이라고 할 수 있습니다.
객체 지향 : 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 객체들의 모임으로 작성, 실행합니다.
절차 지향 : 프로그램을 작성할 때 실행 순서에 따라 작성, 실행합니다.
※ 클래스
클래스는 프로그래머가 지정한 이름으로 만든 하나의 독립 공간입니다.
이를 이름 공간(name space)라고 부릅니다.
클래스의 주요 구성 요소는 변수 역할을 하는 클래스 멤버, 함수와 같은 역할을 하는 클래스 메소드입니다.
- 클래스 정의
class 클래스이름 :
클래스 멤버 정의
클래스 메소드 정의
- 클래스 멤버, 메소드 호출
클래스.클래스 멤버
클래스.클래스 메소드
실습 1. 클래스 생성하고 호출해보기
class Tistory():
host='이승혁'
def category(self):
print('Python')
tis=Tistory()
print(tis.host)
tis.category()
클래스 이름 : Tistory
클래스 멤버 : host
클래스 메소드 : category
클래스 메소드는 클래스 내에서 정의되는 함수입니다.
클래스 메소드는 첫 번째 인자가 반드시 self로 시작해야 합니다.
self는 이 클래스의 인스턴스 객체를 가리키는 참조자입니다.
클래스를 실제 코드에서 활용하려면 인스턴스 객체로 만들어야 합니다.
인스턴스 객체 = 클래스를 실제 사용 가능한 형태로 만듬. 선언. ---> tis=Tistory()
Tistory 객체의 클래스 멤버 host는 Tistroy를 선언한 tis 변수를 사용해 확인합니다. ---> tis.host
※ 클래스 멤버 / 인스턴스 멤버
클래스에 선언되는 변수는 클래스 멤버와 인스턴스 멤버가 있습니다.
클래스 멤버 : 클래스 메소드 바깥에서 선언
인스턴스 멤버 : 클래스 메소드 안에서 self와 함께 선언
class Tistory2():
host='이승혁'
def category(self):
category1='R'
self.category2='SQL'
print('Python')
tis=Tistory2()
print(tis.host)
print(tis.category1)
print(tis.category2)
Tistort 클래스--------
클래스 멤버 : host
클래스 메소드 : category
메소드 지역변수 : category1
메소드 인스턴스 멤버 : category2
category1 변수는 category 메소드 내에서만 사용 가능합니다.
따라서 인스턴스 객체 tis의 멤버로 접근은 불가능합니다.
caregory 메소드에서 선언되는 인스턴스 멤버 category2는 메소드가 선언되기 전에는 사용할 수 없습니다.
category 메소드 호출 후에는 tis 인스턴스 객체를 통해 category2 인스턴스 멤버를 사용할 수 있습니다.
※ 클래스 생성자 ?
클래스의 인스턴스 객체(위의 tis)가 생성될 때 자동으로 호출되는 메소드 입니다.
클래스 생성자 선언하기 -
def __init__(self,*args):
*args : 가변 인자 , 인자의 개수가 불명확한 경우 , 내부에서 튜플 처리
**kwargs : 키워드 인자가 확정되지 않은 경우, 내부에서 사전 처리
class Tistory():
host='이승혁'
def __init__(self,*args):
print('티스토리 호스트는 %s입니다.'%self.host)
def category(self):
category1='R'
self.category2='SQL'
print('Python')
tis=Tistory()
클래스를 인스턴스 객체로 선언만 했을 뿐인데 __init__ 생성자가 호출되어 함수를 실행된 것을 볼 수 있습니다.
※ 클래스 소멸자
인스턴스 객체가 메모리에서 제거될 때 자동으로 호출되는 클래스 메소드 입니다.
클래스 소멸자 선언하기 -
def __del__(self):
class Tistory():
host='이승혁'
def __init__(self,**wargs):
print('티스토리 호스트는 %s입니다.'%self.host)
def category(self):
category1='R'
self.category2='SQL'
print('Python')
def __del__(self):
print('Tistory 객체가 메모리에서 제거됩니다')
tis=Tistory()
del tis
실습 2. gun 클래스를 만들고, 생성시 ' 총이 생성되었습니다. 0 발 장전되어있습니다.' 문구 출력하기,
charge 메소드 : ' n 발 충전되어 n발 남아있습니다 ' 문구 출력하기,
shoot 메소드 : '탕! n 발 남아있습니다.' 문구 출력하기
gun 클래스 제거 ' gun 객체를 메모리에서 제거합니다.' 출력하기.
class gun:
bullit=0
def __init__(self):
print('총이 생성되었습니다. %d발 장전되어 있습니다.'%self.bullit)
def charge(self,num):
self.bullit+=num
print('%d발 충전합니다. %d발 장전되어 있습니다.'%(self.bullit,num))
def shoot(self,num2):
for i in range(num2):
self.bullit-=1
print('탕! %d발 남았습니다.'%self.bullit)
def __del__(self):
print('gun 객체를 메모리에서 제거합니다')
g=gun()
g.charge(10)
g.shoot(4)
del g
다음 포스팅에서는 클래스의 상속에 대해서 알아보도록 하겠습니다.
읽어주셔서 감사합니다.
'프로그래밍 > Python' 카테고리의 다른 글
Python-12) input, type, % , divmod, abs, round ,int ,float (0) | 2020.12.04 |
---|---|
Python-11) Python - Oracle 연동하기 , python sql, 파이썬 sql (0) | 2020.11.25 |
Python-10) 예외 처리하기(try ~ except) : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.24 |
Python-9) 클래스의 상속, 오버로딩, 오버라이딩 : Python 설치, 클래스, 상속, 객체지향 언어 (2) | 2020.11.23 |
Python-7) Numpy : Python, Python 설치, 파이썬 마스터, 객체지향 언어 (0) | 2020.11.16 |
Python-6) 함수, 모듈, 패키지 : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.11 |
Python-5) tuple , list, dictionary : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.10 |
Python-4) Sequence, Indexing, Slicing, len : Python, Python 설치, 시퀀스, 슬라이싱, 파이썬 마스터 (0) | 2020.11.09 |