티스토리 뷰

728x90
반응형

목차

     

    그간 웹에서 장고 예제를 찾은 뒤 열심히 따라 해서 기초적인 게시판을 만들었는데,

     

    그 마지막 글에 '짜잔! 여기까지 함수 기반 뷰였습니다! 클래스 기반 뷰를 보려면 아래 링크를 참조하세요!'라고 되어있어

     

    무척 당황을 했다. 해서 한 다리 건너 아는 개발자에게 물어보니 '무조건 클래스 기반 뷰로 개발하셔야 한다.'

     

    는 답이 돌아와서 처음부터 클래스 기반 뷰로 개발하는 예제를 찾았으나 실패.

     

    원래 함수 기반 뷰로 먼저 개발한 뒤에 클래스 기반 뷰로 바꾸는 걸까? 그럴 리가 없다고 생각해서

     

    지금까지도 적당히 따라 할만한 블로그를 찾는 중이다. 없으면 뭐.. 공식문서 봐야지...

     

    아무튼 MVT 패턴에도 채 익숙해지지 못했지만 지금까지와는 살짝 다른 방법의 구현을 해야 한다고 하니,

     

    나를 위해 짧게라도 정리하고 가기로.

     

    Function-Based View(FBV)

     

    지난 글에도 적었지만, MVT 패턴에서 View는 MVC 패턴에서 Controller와 마찬가지로 핵심 로직을 구현한다.

     

    따라서 (아마도) 실제 구현할 때 가장 많이 들여다보아야 하는 파일이 아닌가 싶은데,

     

    장고에서 뷰는 크게 두 가지 방식으로 구현된다.

     

    그중 먼저 함수 기반 뷰(FBV)의 특징을 나열하자면 아래와 같다.

     

    • 당연히 함수의 집합으로 정의된다. 간단하고 가벼운 기능을 구현하는 경우 유용하다.
    • 매개변수로 request를 받으며, HttpResponse를 반환한다.
    • 디비 연결은 직접 연결이나 ORM을 사용할 수 있다.

    계속해서 장단점은 아래와 같다.

     

    • 장점

      • 구현이 간단하고 가독성이 좋다.
      • 사용자의 요청을 함수로 받아 처리하기 때문에 예상하지 못한 부작용이 적다.
      • 구현한 뷰 함수를 다른 뷰 함수에서 호출해서 재사용할 수 있다.
    • 단점

      • 복잡한 로직을 구현하기 어려우며, 가독성이 급격하게 떨어진다.
      • 함수로 독립된 로직이 많이 생길 경우 유지보수에 불리하다.
      • 클래스 기반 뷰에 비해 상대적으로 재사용성이 떨어진다.

    요약하면 FBV는 간단한 기능을 구현할 때 사용하기 좋다.

     

    Class-Based View(CBV)

     

    CBV는 상대적으로 익숙한, 클래스를 기반으로 객체지향적 설계를 하는 방식이다.

     

    물론 FBV 역시 객체지향적으로 설계할 수 있지만, 둘 중 어느 쪽이냐면 CBV가 객체지향에 더 어울린다고 한다.

     

    먼저 특징 및 장점은 아래와 같다.

     

    • 당연히 클래스를 먼저 정의하고 그 안에서 뷰를 처리하는 메서드를 구현한다.
      여기서 메서드란 HTTP 요청을 처리하고 응답을 반환하는 역할을 하는 메서드를 가리킨다.
    • 재사용성
      객체지향의 중요한 개념인 상속, 오버라이딩, 믹스인을 적극적으로 활용하기 때문에 재사용성이 높다.
      한 클래스에서 기능을 미리 구현해 두고 다른 여러 클래스에서 상속해 활용할 수 있기 때문이다.
    • 유지보수성, 가독성
      위와 같은 이유로 코드의 유지보수가 상대적으로 쉽고 가독성이 뛰어나다.
    • 개발 시간 단축
      CBV는 장고에서 기본적으로 제공하는 "제네릭 뷰"를 상속받아 작성한다.
      제네릭 뷰에는 개발에 필요한 많은 뷰가 이미 구현되어 있기 때문에, 잘 찾아 사용하면 개발시간이 많이 단축된다.

    계속해서 단점이다.

     

    • 복잡하고 학습 곡선이 가파르다.
      개발자의 지식과 구현 기능의 규모에 따라 적절한 뷰 함수가 선택된다.
      이 과정에서 구현 방식에 따라 코드가 복잡해질 가능성이 있으며,
      객체 지향 프로그래밍 및 제네릭 뷰에 대해 미리 알아야 하므로 학습 곡선이 높다.
    • 코드의 길이가 길어질 수 있다.
      복잡한 기능 구현시 여러 가지 상속으로 인해 코드가 길어질 수 있다.
    • 데코레이터를 사용할 수 없다.
      이 때문에 일부 개발자들은 함수 기반 뷰를 선호하기도 한다.

    요약하면 여러 가지 상속을 통해 복잡한 기능을 쉽게 구현하고 싶을 때 CBV를 사용한다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/05   »
    1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    글 보관함