[Python] 믹스인(Mixin), 컴포지션(composition)

JinUk Lee·2025년 2월 25일

python 개념 공부

목록 보기
9/14

믹스인

상속과 비슷하지만 조금 다른 개념이다.

보통 상속은 부모클래스에서 큰 개념을 구현하고 자식클래스에서 부가적인 기능을 구현한다.

예를 들어서 개(Dog)라는 부모클래스를 정의하고 진돗개, 시츄 등등 개의 종류를 자식 클래스로 구현하는 식이다.

그런데, 믹스인은 핵심 기능을 구현한 클래스가 부가적인 기능을 사용하기 위해 상속을 받는 개념이다.

Django rest framework 코드에서 예시를 가져왔다.


from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import mixins
from rest_framework import generics

class SnippetList(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

SnippetListGenericAPIView를 상속받는 클래스인데, 여기에 list, create라는 부가적인 기능을 구현하고싶어서 Mixin 을 가져온 것이다.


class ListModelMixin:
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

ListModelMixin 코드는 위와 같다.

정리하자면, 상속은 상속인데 부가적인 기능을 정의해서 다른 핵심적인 클래스에서 사용할 수 있게 만든 것이 믹스인이라고 생각하면 된다.

컴포지션

컴포지션은 다른 클래스의 메서드를 사용하고싶지만 상속은 원하지 않을때 사용한다.


class Game:
	
    def add(self,x,y):
    	return x+y


class TTest:
    def __init__(self, name, age):
        self.Game = Game() # 클래스의 객체를 가져옴
 
    def add(self, x, y):
        return self.Game.cal_add(a, b) # 활용할 메서드를 가져온다

구조를 보면 임의의 개체를 정의해서 메소드를 리턴하는 방식이다.

profile
개발자 지망생

0개의 댓글