[Django] FBV vs CBV

Error Coder·2023년 3월 21일
0

FBV(Function Based View) - 함수형 뷰
CBV(Class Based View) - 클래스형 뷰

FBV란?

뷰를 작성할 때 함수 형식으로 작성하는 방식

# urls.py
urlpatterns += [
	path('', views.index, name='index'),
]
# views.py
@api_view(['GET', 'POST'])
def index(request):
	if request.method == 'POST':
    	return HttpResponse("Post Method")
    else:
    	return HttpResponse("Get Method")

CBV란?

뷰를 작성할 때 클래스 형식으로 작성하는 방식

# urls.py
urlpatterns += [
	path('', views.IndexView.as_view(), name='index'),
]
#views.py

class ContactView(View):
	def post(self, request):
    	return HttpResponse("Post Method")
    def get(self, request):
    	return HttpResponse("Get Method")

두 방법은 모두 같은 기능을 하는 View다. 차이점은 로직을 클래스 형으로 구현할 것인지, 함수형으로 구현할 것인지에 대한 차이다.
어느 상황에서 어떤 것을 쓰는 것이 좋다고 말할 수 없다.

FBV와 CBV의 장단점

FBV
장점 : 편하게 구현 기능, 읽기 편한 로직, 데코레이터 사용이 명료함
단점 : 확장/재사용이 어려움

CBV
장점 : 확장/재사용 용이, 다중 상속, Mixin 가능, HTTP Method가 클래스 안에서 나누어 처리, 강력한 Generic Class View
단점 : 읽기 어려움, 상속과 Mixin으로 인해 코드 이해를 위해 여러 곳을 찾아봐야 함

정리하자면, 상속과 재사용이 많이 필요한 프로젝트는 CBV, 그렇지 않은 경우에는 FBV를 사용하는 것이 좋다고 알려져 있다.
물론, 한 가지 기법만 사용해야 하는 것이 아니기에 섞어서 사용해도 무방하다.

장단점을 충분히 인지하고 적절하게 사용하면 그것이 맞는 방법일 것이다.

출처 : https://leffept.tistory.com/318

profile
개발자 지망생

0개의 댓글