2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance)을 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 5_mixins.py를 생성하고 코드를 실행합니다.

 

 

 

TL;DR

Python은 다중상속은여러 클래스에서 상속을 허용하는 기능입니다. 다중상속을 통해 여러 기본 클래스의 기능을 결합할 수 있습니다. 그러나, 다중 상속은 코드를 복잡하고 유지 관리하기 어렵게 만들 수 있으니 신중하게 사용해야 합니다.
 

 

Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance)

지난 시간에는 Python의 클래스 상속 - 개발자 커뮤니티 SQLER.com - Python 중급 강좌 - 4. 상속(Inheritance) - 에 대해서 공부했습니다. Python의 특징으로 여러 클래스로부터 상속(다중상속)을 지원하는데요, 좀 더 자세히 알아보겠습니다.

 

다중상속(Mixins - multiple inheritance)이란 무엇이고 어디에서 사용되나요?

Python은 여러 클래스로부터 상속을 지원합니다. 정확한 기술 용어는, 다중 상속이지만, 일반적으로 개발자들은 둘 이상의 기본 클래스 조합(mixins)으로 표현합니다. 일반적으로 Django와 같은 프레임 워크에서 사용됩니다.

다중상속은 Python의 특징 중 하나입니다. 많은 개발자가 사용하는 Java나 C#과 같은 언어에서는 다중상속을 지원하지 않습니다. 이런 언어들은, 하나의 클래스에서만 상속을 지원합니다. 언어의 디자인 차이에는 여러 이유가 있습니다.(나중에 한번 더 풀어 보도록 하죠)

 

대표적으로, 다중상속 사용 시, 코드가 복잡해질 수 있기 때문이죠.

한 두 개의 메서드나 속성을 사용하는 클래스가 아니라, 멤버의 개수가 조금만 많아지고 이름이 복잡해지기 시작하면, 이 부모클래스가 어디인지, 어디를 고쳐야 할지 등등 복잡도가 급격히 상승하게 됩니다.

다시 말씀드리지만, 다중상속 사용 시 이러한 코드 유지보수 문제에 대해 주의하셔야 합니다. 

 

그럼, 다중상속 코드를 한번 살펴볼게요.

 

다중상속 사용 시나리오 - 데이터베이스에 연결하고 로깅 작업을 수행

여러 다른 종류의 데이터베이스에 연결하고, 각 연결에 대해 로깅을 수행하는 경우를 생각해 보시죠. 이때 구조적인 유연성을 위해 "연결" 클래스와 "로깅" 클래스를 분리할 수 있고, 각각의 클래스에서 기능을 상속받아 사용하면 유용할 것입니다.

 

두 개의 클래스를 생합니다. Loggable과 Connection 클래스를 생성하고, 각각 메서드를 추가합니다.

class Loggable:
    def __init__(self):
        self.title = ''
    def log(self):
        print('Log message from ' + self.title)

class Connection:
    def __init__(self):
        self.server = ''
    def connect(self):
        print('Connecting to database on ' + self.server)

class SqlDatabase(Connection, Loggable):
    def __init__(self):
        super().__init__()
        self.title = 'Sql Connection Demo'
        self.server = 'Some_Server'
        
# 실행하기 위한 함수를 생성
def framework(item):
    if isinstance(item, Connection):
        item.connect()
    if isinstance(item, Loggable):
        item.log()

sql_connection = SqlDatabase()
framework(sql_connection)

 

이렇게, SqlDatabase 클래스를 생성하면, 두 개의 클래스 - Connection과 Loggable - 로부터. 상속받은 인스턴스가 생성됩니다.

framework라는 함수에서 이 인스턴스를 넘겨 실행하면, 상속을 받았으니 당연히 isinstance가 True로 리턴되어 if 구문이 실행되고, Connection 클래스의 connect() 메서드가 실행되며 이어서 Loggable 클래스의 log() 메서드가 실행됩니다.

 

이전 SQLER의 강좌인 개발자 커뮤니티 SQLER.com - Python 중급 강좌 - 3. 클래스(Class) 강좌와 개발자 커뮤니티 SQLER.com - Python 중급 강좌 - 4. 상속(Inheritance) 강좌를 보셨다면, 어렵지 않게 코드를 이해하실 수 있을 거에요.

 

다중상속 사용 시 주의사항

다중상속은 이렇게 여러 클래스로부터 기능을 상속받아 사용할 수 있는 장점이 있지만, 코드의 복잡도를 증가시키고 유지보수를 어렵게 할 수도 있습니다. 사용 시 충분히 염두에 두시고, 주의해서 사용하세요.

 

감사합니다.

 

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

개발자 커뮤니티 SQLER.com - Python 중급 강좌 - 3. 클래스(Class)

개발자 커뮤니티 SQLER.com - Python 중급 강좌 - 4. 상속(Inheritance)

c9-python-getting-started/more-python-for-beginners/05 - Mixins at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 39696
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 21676
118 오픈소스 소통을 위한 Git 공부하기 | ep6. 내 저장소에 소스를 푸시하기 위한 Fork | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.02 94
117 오픈소스 소통을 위한 Git 공부하기 | ep5. 브랜치 (Branch) 이해하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.01 57
116 오픈소스 소통을 위한 Git 공부하기 | ep4. 변경 단위를 만들기 위한 Commit | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.31 92
115 오픈소스 소통을 위한 Git 공부하기 | ep3. 소스를 가져오기 위한 Clone | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.30 81
114 오픈소스 소통을 위한 Git 공부하기 | ep2. Git를 소개합니다 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.28 92
113 오픈소스 소통을 위한 Git 공부하기 | ep1. 버전 관리의 중요성 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.27 92
112 오픈소스 소통을 위한 Git 공부하기 | ep0. 인트로 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.24 142
111 Azure VM - 오픈소스 ROS Gazebo Web 설치 및 실행 file 코난(김대우) 2022.10.19 195
110 parquet 파일의 meta 정보 추출 코난(김대우) 2021.11.16 1183
109 embedded SQL - GlueSQL, rust 기반 오픈소스 프로젝트 file 코난(김대우) 2021.10.22 470
108 대규모 머신러닝 프로젝트 Serving에 사용되는 Python WAS, ASGI - uvicorn file 코난(김대우) 2021.10.06 1042
107 Apache Arrow 리뷰 file 코난(김대우) 2021.10.05 2073
106 autopep8을 이용한 python 린트(linting) 구현 코난(김대우) 2021.09.15 711
105 Python에서 환경변수(environment variable) 처리 코난(김대우) 2021.09.15 282
104 Python에서 random 문자열이나 숫자 가져오는 방법 코난(김대우) 2021.09.15 997
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 828
102 Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 474
101 Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 1489
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 779
» Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 585





XE Login