[Django] FBV와 CBV(함수형 뷰와 클래스형 뷰)
django에서는 views.py의 코드로 APP을 동작시킨다. 이때 views.py를 작성하는 방식은 크게 2가지로 나뉘는데, 그 두가지가 바로 FBV(함수형 뷰)와 CBV(클래스형 뷰)이다.
1. FBV: Function Based View
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view
# FBV로 작성
@api_view(['GET'])
def HelloAPI(request):
return Response("hello world")
1-1. FBV의 장점
- 데코레이터(@)를 이용해 기능을 직관적으로 표현할 수 있다.
- 읽기 편하다.(처음 django를 배울 때 대부분 FBV를 사용한다.)
1-2 FBV의 단점
- 함수의 재활용이 어렵다.
2. CBV: Class Based View
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view
# CBV로 작성
class HelloAPI(APIView):
def get(self, request):
return Response("Hello World")
2-1. CBV의 장점
- class의 다중 상속을 사용할 수 있어서 코드의 재활용 폭이 넓다. (핵심)
- Generic Class View를 사용할 수 있다. (핵심)
- 코드가 간결하다.
- GET인지 POST인지
request.method =='POST'
반복문으로 판정할 필요가 없다. 함수명으로 get, post가 그대로 활용된다.
2-2. CBV의 단점
- 다중 상속이 가능하기 때문에 코드를 읽기 어렵다. 한 줄을 이해하기 위해 상속받은 클래스의 코드까지 봐야할 수 있다.
3. 그러면 언재 FBV, CBV를 사용해야 할까?
정답은 없다.
FBV, CBV 모두 같은 기능을 얼마든지 만들 수 있다. 그러나 위에서 언급한 장단점을 파악하고 상황에 맞는 방법을 사용하는 것이 중요하다.
자료조사를 하면서 다른 개발자분들의 의견을 보니, 아래와 같은 의견들이 있었다.
- 403,404,500 에러 핸들링에는 FBV를 사용한다.
- Generic View가 유용할 경우 CBV를 사용한다.
- 처음 django를 배우는 경우 상속 등 복잡한 요소가 비교적 적고 코드가 직관적인 FBV로 코딩하는 것이 좋다.
이처럼 어느 정도의 권장사항은 있지만 완벽한 정답은 없다. 각각의 장단점을 잘 이해하고 상황에 맞춰서 본인에게 편한 방법을 쓰는 것이 바람직하다.