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의 장점

  1. 데코레이터(@)를 이용해 기능을 직관적으로 표현할 수 있다.
  2. 읽기 편하다.(처음 django를 배울 때 대부분 FBV를 사용한다.)

1-2 FBV의 단점

  1. 함수의 재활용이 어렵다.

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의 장점

  1. class의 다중 상속을 사용할 수 있어서 코드의 재활용 폭이 넓다. (핵심)
  2. Generic Class View를 사용할 수 있다. (핵심)
  3. 코드가 간결하다.
  4. GET인지 POST인지 request.method =='POST' 반복문으로 판정할 필요가 없다. 함수명으로 get, post가 그대로 활용된다.

2-2. CBV의 단점

  1. 다중 상속이 가능하기 때문에 코드를 읽기 어렵다. 한 줄을 이해하기 위해 상속받은 클래스의 코드까지 봐야할 수 있다.

3. 그러면 언재 FBV, CBV를 사용해야 할까?

정답은 없다.

FBV, CBV 모두 같은 기능을 얼마든지 만들 수 있다. 그러나 위에서 언급한 장단점을 파악하고 상황에 맞는 방법을 사용하는 것이 중요하다.

자료조사를 하면서 다른 개발자분들의 의견을 보니, 아래와 같은 의견들이 있었다.

  • 403,404,500 에러 핸들링에는 FBV를 사용한다.
  • Generic View가 유용할 경우 CBV를 사용한다.
  • 처음 django를 배우는 경우 상속 등 복잡한 요소가 비교적 적고 코드가 직관적인 FBV로 코딩하는 것이 좋다.

이처럼 어느 정도의 권장사항은 있지만 완벽한 정답은 없다. 각각의 장단점을 잘 이해하고 상황에 맞춰서 본인에게 편한 방법을 쓰는 것이 바람직하다.