추상적인. 그게 무슨 뜻이야?

일반적으로 추상적인 단어는 다음을 의미합니다.

“what is not concrete, abstraction’s result”
or “which has a high level of generalization”.



프로그래밍과 관련하여 우리는 어떤 맥락에서 추상적인 단어를 보게 될 것입니다. 다음은 당신이 마주칠 수 있는 상황입니다.

추상 클래스



추상 클래스는 기본적으로 인스턴스를 직접 만들 수 없는 클래스입니다.

그렇다면 왜 존재해야 하는가?

직접 인스턴스화할 수 없는 클래스이지만 클래스의 상속 계층 구조에서 부모 클래스로 설계되었습니다. 추상 클래스는 구체적인 메서드를 포함하여 모든 종류의 메서드를 구현할 수 있습니다. 그러나 일반적으로 추상 클래스에는 추상 메서드도 포함됩니다.

추상 메서드



아직 추상 클래스에 의해 구현되지 않은 메서드이지만 이를 상속하는 모든 클래스에 의해 구현되어야 합니다.
비유하자면 추상 클래스에서 상속하는 모든 클래스에서 사용하는 일종의 상용구, 프레임워크 또는 인터페이스라고 할 수 있습니다.

이 주제는 제가 Python을 공부할 때 떠오른 것입니다. 해당 주제와 관련된 예제를 제공하는 것이 최고의 프로그래밍 언어라고 생각하지 않지만(나중에 이에 대해 설명하겠습니다) 잠시 그 ​​사실을 제쳐두고 아래에 간단한 예제를 작성하겠습니다.

class AbstractAnimal:
    def __init__(self, specie_name):
        self.specie_name = specie_name

    def birth(self):
        print(f"I'm an animal and my specie is {self.specie_name}.")
        self.make_sound()

    def make_sound(self):
        raise NotImplementedError("You need to implement a make_sound method.")


class Cat(AbstractAnimal):
    def __init__(self):
        super().__init__("cat")

    def make_sound(self):
        print("Meow")


class Dog(AbstractAnimal):
    def __init__(self):
        super().__init__("dog")

    def make_sound(self):
        print("Woof!")


kitten = Cat()
kitten.birth()

puppy = Dog()
puppy.birth()


콘솔 출력:

>>> I'm an animal and my specie is cat.
    Meow
    I'm an animal and my specie is dog.
    Woof!


위의 예에서 우리는 AbstractAnimal라는 추상 클래스를 만들고 이를 사용하여 CatDog라는 다른 클래스에 부모 클래스로 전달했습니다.
추상 클래스에는 birth 라는 두 번째 메서드를 호출하는 make_sound 메서드가 있습니다. 이 마지막 방법은 우리의 추상 메서드입니다. 추상 클래스에 선언되었지만 구현되지는 않았습니다. 이는 AbstractAnimal 클래스에서 상속된 클래스에 의해 구현되어야 함을 의미합니다. 그렇지 않으면 프로그램이 충돌하여 오류가 발생합니다.
make_sound 메서드를 상속하는 클래스에 따라 다르게 구현해야 하는 경우 DogCat 클래스가 동일한 메서드에 대해 서로 다른 코드를 구현하고 메서드가 해당 인스턴스에서 호출될 때 해당 클래스의 각각의 make_sound 메서드가 호출됩니다.

그리고 이 기사 주제와 관련된 예제를 제공하는 데 Python이 최고의 프로그래밍 언어가 아닐 수도 있다고 말한 이유는 무엇입니까?

이것은 명심해야 할 참고 사항입니다. Python에서는 추상 클래스의 추상 메서드를 자식 클래스에서 구현해야 할 필요가 없습니다. 강제 동작인 다른 프로그래밍 언어에서(자식 클래스는 추상 클래스가 상속한 추상 메서드를 구현해야 함).

또한 Python의 다른 프로그래밍 언어와 달리 클래스나 메서드가 추상인지 여부를 정의하는 추상 키워드가 없습니다. 관례적으로 우리는 파이썬에서 추상 클래스를 생성할 수 있으며 추상 클래스처럼 취급하므로 추상 클래스로 간주됩니다. 즉, 해당 클래스에 대한 인스턴스를 직접 만들지 않습니다. 위의 예에서와 같이 클래스를 정의할 때 "추상"단어를 사용할 수 있습니다(클래스 이름을 Animal 로 정의하는 대신, 예를 들어 AbstractAnimal ).

내가 말했듯이 : 그것은 단지 메모입니다. 개념을 배우는 데 방해가 되지는 않지만 규칙을 사용하는 대신 언어의 일부로 구현하는 Java와 같은 다른 프로그래밍 언어가 있습니다.

좋은 웹페이지 즐겨찾기