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
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)
|
사용 목적#
- 계층 구조 생성: 관련 클래스들의 공통 속성과 메서드를 정의한다.
- 템플릿 메서드 패턴: 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스에서 구현하도록 한다.
- 프레임워크 개발: 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;
}
}
|
용어 정리#
참고 및 출처#