본문 바로가기

파이썬(PYTHON)/개념정리
[파이썬(Python)] 클래스

OOP(객체지향)

클래스

'''
#class : 객체를 생성하기 위한 원형(설계도)
    -변수(속성)
    -메서드(기능)
    
- 인스턴스 : 객체, object 라고도 하며, 메모리에 class를 로딩(저장)한 것(프로그램 실행상태)

- 생성자 : def __init__

- 클래스 변수 : 객체가 공유하는 변수. 메서드의 외부에 정의함. 자동으로 메모리에 저장됨.
    ~(클래스명.변수명) 으로 사용 가능

- 인스턴스 변수 : 메서드 내부에 정의함. 현재 객체에만 속함.(클래스 내부에서 접근 가능함.)
'''

#속성(변수) : 바퀴 4개, 핸들 1개, 색=[빨강, 하양, 검정]
#기능(메서드) : 달린다. 멈춘다.
class Car :

    fuelType = "gasoline" # 클래스 변수 : 자동으로 메모리에 저장됨.
    
    #생성자
    def __init__(self, tire, handle) :
        # 변수 생성(인스턴스 변수)
        self.tire = tire
        self.handle = handle
        self.color = ['red', 'white', 'black']           

    def move(self) :    #메서드
        print("자동차가 움직인다.")

    def stop(self) :
        print("자동차가 멈춘다.")

##c = Car (6,2) #class Car을 객체로 만듦

c1 = Car(4,1)
c2 = Car(6,3)        

print(c1.tire)
print(c2.tire)
print(Car.fuelType)

class OilBank :

    def __init__(self) :
        pass

    def put(self):
        print(Car.fuelType + "을/를 넣습니다.")

o = OilBank()
o.put()


==========================================================================
==============

상속

 

'''
#★상속 : 클래스의 특성(메서드)을 다른 클래스로 파생시킴.

- 클래스명에 괄호안에 상위 클래스명을 적어서 상속을 할 수 있음
    ~class 자식 클래스 (부모 클래스) :
 
- 변수, 메서드를 물려주는(상속을 주는) 클래스 : 부모, 슈퍼, 상위 ...
   
- 변수, 메서드를 물려받는(상속 받는 클래스) : 자식, 하위, 파생, 서브...

- 부모 클래스의 특성을 자식 클래스에서 사용할 수 있음.

- 자식 클랙스에서 부모 클래스의 메서드를 재정의 할 수 있음(오버라이딩)
'''

class Animal :

    def __init__(self) :
        self.eye = 2
        self.leg = 4

    def move(self) :
        print("동물이 움직인다.")

    def sleep(self) :
        print("동물이 잔다.")

class Tiger (Animal) :

    def __init__(self) :
        super().__init__()  #부모 class의 생성자를 호출해야 부모객체의 변수 사용 가능!!


t = Tiger()
t.move()
print(t.eye)


t = Tiger()
t.move()


==========================================================================
==============

오버라이딩

'''
#오버라이딩 :

- 부모 클래스의 메서드를 자식 클래스에서 다른 기능을 원하거나 재정의함.

- 함수명은 동일함.

- 파라미터 갯수나 리턴값 형이 동일하지 않아도 됨. 이름만 똑같으면 다 ok
'''

class Animal :

    def __init__(self) :
        self.eye = 2
        self.leg = 4

    def move(self) :
        print("동물이 움직인다.")

    def sleep(self) :
        print("동물이 잔다.")

class Tiger (Animal) :

    def __init__(self) :
        pass

    def move(self) :
        print("호랑이가 움직인다.")


t = Tiger()
t.move()


==========================================================================
==============

'''
#가비지 컬렉션(Garbage Collection)

- 불필요한 객체를 자동으로 삭제하여 메모리 공간을 비움 처리함.

- 주기적으로 사용하지 않는 것들을 정리하여 메모리 공간을 확보하는 과정을 가비지 컬렉션이라고 함.

- 파이썬에서 가비지컬렉터가 프로그램이 실행중에 불필요한 것을 정리하며, 객체 참조 카운트가 0이 되면 처리함.

- 객체 참조 카운트는 새롭게 할당될 때 증가함.

- Del를 사용하면 객체 참조 카운트는 감소함.

- 객체 참조를 아무곳도 하지 않으면, 즉 객체 참조 카운트가 0이면 가비지 컬렉터가 실행하여 메모리를 확보함.
'''

데이터 숨김 처리

'''
#데이터 숨김 처리 : 외부에서 특정 변수나 특정 메서드를 안 보이게 처리함.

- 객체의 속성(데이터)을 외부에 노출시키지 않을 수 있음.
    ~외부(다른 클래스)에서 호출 불가

- 언더스코어 2개(__)로 변수명을 지정함.

- 클래스 내부에서는 self.__메서드명() 으로 사용가능함. (self 제거)

- 클래스 내부에서는 self.클래스변수 으로 사용가능함.
'''

class EmployeeSalary :

    def __init__(self, name, salary) :
        self.name = name
        self.__salary = salary

    def getSalary(self) :
        print(self.name + "님은 " + str(self.__salary) + "원입니다.")

    def __getAnnual(self) :
        print("연봉은 " + str(self.__salary * 12) + "입니다." )


hong = EmployeeSalary("홍길동", 3000000)
kim = EmployeeSalary("김유신", 2000000)

hong.getSalary()
kim.getSalary()


print(hong.salary)

hong.__getAnnual()