Python

Python 문법 기초 29 - 추상 클래스(추상 메소드)

코딩탕탕 2022. 10. 22. 17:12

 

추상클래스는 자식 클래스에서 부모의 메소드의 이름을 강요하도록 하기 위해 사용한다. 그 이유는 다형성을 구사하기 위해서이다.

 

# 추상 클래스 (추상 메소드)
# 자식 클래스에서 부모의 메소드의 이름을 강요하도록 하기 위해 사용

from abc import *

class AbstractClass(metaclass = ABCMeta): # 추상 클래스가 된다.
    @abstractmethod
    def myMethod(self): # 추상 메소드가 됨
        pass
    
    def normalMethod(self):
        print('추상 클래스는 일반 메소드를 가질 수도 있다.')
        
# parent = AbstractClass() Can't instantiate abstract class

class Child1(AbstractClass):
    name = '난 Child1'
    
c1 = Child1()
print(c1.name)
c1.myMethod()
c1.normalMethod()


<console>
난 Child1
Child1에서 추상 메소드에 내용을 적음
추상 클래스는 일반 메소드를 가질 수도 있다.

java와 다르게 파이썬에서는 추상 클래스에서 일반 메소드를 가질 수 있다.

추상 클래스를 부모 클래스로 가져와놓고 override를 하지 않으면 err가 발생한다.

추상 메소드에는 무조건 @abstractmethod를 위에 붙여야된다.

 

class Child2(AbstractClass):
    def myMethod(self): # 추상 메소드가 됨
        print('Child2에서 추상의 마법을 풀다.')
        print('이제는 자유다')
    
    def normalMethod(self):
        print('추상 클래스의 일반 메소드는 오버라이딩이 선택적이다.')
        
    def good(self):
        print('Child2 고유 메소드')
        
c2 = Child2()
c2.myMethod()
c2.normalMethod()
c2.good()


<console>
Child2에서 추상의 마법을 풀다.
이제는 자유다
추상 클래스의 일반 메소드는 오버라이딩이 선택적이다.
Child2 고유 메소드

 

imsi = c1
imsi.myMethod()
print()
imsi = c2
imsi.myMethod()


<console>
Child1에서 추상 메소드에 내용을 적음

Child2에서 추상의 마법을 풀다.
이제는 자유다

같은 함수를 호출하지만 값이 다르다. 다양성을 추구하기 위해 추상 메소드를 사용한다.