Abstract Classes

추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스이다.
추상 메서드는 선언만 되고 구현되지 않은 메서드를 말한다.
이는 기본적인 구조는 정의하지만 세부적인 구현은 하위 클래스에 맡긴다.

기본 구조:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def calculate_area(self):
        """도형의 넓이를 계산하는 추상 메서드"""
        pass
        
    @abstractmethod
    def calculate_perimeter(self):
        """도형의 둘레를 계산하는 추상 메서드"""
        pass
        
    def get_description(self):
        """일반 메서드 - 모든 하위 클래스가 공유"""
        return "이것은 2차원 도형입니다."

주요 특징

  1. 인스턴스화 불가: 추상 클래스는 직접 객체를 생성할 수 없다.
  2. 상속 목적: 다른 클래스들의 기본 클래스 역할을 한다.
  3. 추상 및 구체 메서드 포함: 추상 메서드와 구현된 메서드를 모두 가질 수 있다.
  4. 공통 인터페이스 제공: 관련된 클래스들에 대한 공통 인터페이스나 동작을 정의한다.

추상 클래스의 구현과 활용

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
        
    def calculate_area(self):
        """원의 넓이 계산 구현"""
        return 3.14 * self.radius * self.radius
        
    def calculate_perimeter(self):
        """원의 둘레 계산 구현"""
        return 2 * 3.14 * self.radius

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
        
    def calculate_area(self):
        """직사각형의 넓이 계산 구현"""
        return self.width * self.height
        
    def calculate_perimeter(self):
        """직사각형의 둘레 계산 구현"""
        return 2 * (self.width + self.height)

사용 목적

  1. 계층 구조 생성: 관련 클래스들의 공통 속성과 메서드를 정의한다.
  2. 템플릿 메서드 패턴: 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스에서 구현하도록 한다.
  3. 프레임워크 개발: API나 프레임워크에서 기본 구조를 정의하는 데 사용된다.

예시

Java에서 추상 클래스 선언 예:
이 예시에서 Shape는 추상 클래스로, draw() 메서드는 추상 메서드이며 setColor() 메서드는 구체적인 구현을 가진다.

1
2
3
4
5
6
7
8
9
abstract class Shape {
    String color;
    
    abstract void draw();
    
    void setColor(String color) {
        this.color = color;
    }
}

용어 정리

용어설명

참고 및 출처