프로그래밍/Python

Python-8) Class : Python, Python 설치, 파이썬 클래스, 객체

LeeSeunghyuk 2020. 11. 17. 13:31
반응형

안녕하세요 이승혁입니다.

 

이번 포스팅은 객체 지향 언어의 핵심인 클래스와 객체에 대해 실습을 진행해 보도록 하겠습니다.

 

※ 객체 지향 언어 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


다음 포스팅에서는 클래스의 상속에 대해서 알아보도록 하겠습니다.

 

읽어주셔서 감사합니다.

 

 

반응형