Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Binary
- HashTable
- linked list
- dfs
- sorting
- 리트코드
- recursive
- easy
- matrix
- leetcode
- binary search
- 이진트리
- Depth-first Search
- Python
- Medium
- 문자열
- binary tree
- 쉬움
- two pointers
- list
- DP
- 미디움
- string
- hash table
- Array
- backtracking
- tree
- math
- 중간
- 재귀
Archives
- Today
- Total
부부의 코딩 성장 일기
Python 추상화와 abc 라이브러리 본문
추상화란?
- 추상화란 프로그램의 세부 구현을 감추고 필요한 부분만을 노출시키는 것을 의미한다.
- 추상클래스는 구현하지 않은 추상메소드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메소드를 반드시 구현하도록 강제한다.
- 왜 그렇게 할까?
- 이는 코드를 더 간결하게 만들고 모듈성을 높여 유지보수를 쉽게 만들어준다.
- 만약 추상클래스가 여러개의 자식 클래스를 가지고 있고, 자식 클래스에서 추상 메소드에서 정의해야 하는 내용이 다르다면,
- 추상클래스를 사용하는 것이 효율적이겠다.
abc Library
- 이는 python에서 추상 베이스 클래스(ABC - Abstract Base Class)를 정의하는 데 사용된다.
- 즉, 추상 베이스 클래스는 일종의 템플릿으로, 특정 메서드가 반드시 파생 클래스에서 구현되어야 함을 정의한다.
- 이를 통해 코드의 일관성을 유지하고, 특정한 규칙을 따르도록 강제할 수가 있다.
- 아래의 예제를 보면 Shape은 area와 perimeter라는 추상 메서드를 가지고 있다.
- 추상메서드는 메서드 생성 시, @abstractmethod라는 decorator로 감싸진다.
- 그리고 Shape라는 클래스를 상속받은 Circle에서,
- 위에서 미구현 된 area, perimeter에 대해 정의를 하게 된다.
- 만약에 Shape라는 클래스를 상속받은 class에서 추상 메서드를 정의하지 않으면, 에러가 발생한다.
- 만약 우리가 Shape를 상속받아서 Rectangle, Triangle이라는 클래스를 추가로 생성한다고 하면,
- area와 perimeter를 계산하는 방법이 달라질 수밖에 없으니, 추상화와 abc 라브러리를 사용하면, 코드의 일관성을 유지하고 특정 규칙을 따르도록 클래스를 설계하는 것이 가능해진다.
from abc import ABC, abstractmethod
# 추상 베이스 클래스 정의
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
# 추상 베이스 클래스를 상속받은 구체적인 클래스
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius**2
def perimeter(self):
return 2 * 3.14 * self.radius
# 사용 예시
circle = Circle(5)
print("원의 면적:", circle.area())
print("원의 둘레:", circle.perimeter())
'Python > Fundamentals' 카테고리의 다른 글
Python coroutine 코루틴, asyncio 라이브러리 (0) | 2024.03.01 |
---|---|
Python에서 __init__.py 의 역할 (0) | 2024.02.24 |
데코레이터(Decorator) (0) | 2024.02.19 |
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2024.02.18 |