Skip to content

Latest commit

 

History

History
67 lines (50 loc) · 3.13 KB

assignment4.md

File metadata and controls

67 lines (50 loc) · 3.13 KB

Seminar4 Assignment

due: 2023.12.02 (토) 24:00

과제 목적

  • 더 좋은 코드, 좋은 구조에 대해 고민해봅니다.
  • 의존성 주입, 의존성 역전의 원칙을 코드에 적용해봅니다.

과제 - 넷플릭스 리팩토링하기

#1 기존 코드 리팩토링하기

과제2, 3에서 작성했던 코드를 세미나 시간에 배웠던 아키텍쳐에 따라 리팩토링해봅니다. 이번 과제에서는 모든 구현이 정해진 레이어에서 이루어져야 합니다. 모든 코드는 아래 폴더 중 하나에 들어가야 합니다.

  • UI
  • ViewModel
  • BusinessLogic
    • Application
    • Domain
  • Infra

각 폴더에 들어가야 하는 코드는 아래와 같습니다.

  • UI
    • UIView, UIViewController 등 UI 관련 코드
    • AutoLayout 관련 코드
    • ViewModel의 데이터를 Combine을 통해 바인딩
  • ViewModel
    • UseCase로부터 데이터를 받아와 ViewModel에 저장
    • UI를 그리기 위해 필요한 각종 계산 로직들
    • import UIKit 금지
  • BusinessLogic
    • Application
      • Repository 프로토콜 선언
      • 위에서 선언한 Repository 프로토콜을 의존성으로 주입받는 UseCase 클래스 구현
    • Domain
      • 비즈니스 로직이 담긴 클래스 혹은 구조체 선언 (e.g. struct Movie)
  • Infra
    • BusinessLogic/Application에서 선언했던 프로토콜을 채택하여 구현
    • (필요한 경우) 실제 API 호출에 사용되는 DTO 선언 (e.g. struct MovieDTO)

더욱 구체적인 예제는 세미나 자료를 참고해주세요.

#2 평점 매기기

아래 기능을 추가로 구현해주세요. 새로운 기능도 위에서 제시된 구조에 따라 구현되어야 합니다. 디자인은 자유롭게 구현해주세요.

  • 탭에 관계 없이, Cell을 누르면 디테일 뷰를 present 하도록 구현해주세요.
  • 디테일 뷰에서는 커다랗게 썸네일을 보여줘야 하고, 그 밑에 제목과 평점 UI를 표시해주세요.
  • 평점 UI는 보편적으로 생각하는 별 5개짜리 버튼으로 구현해주시면 됩니다. (★★★★★)
  • 내가 매긴 평점은 UserDefaults에 저장해서, 앱을 종료했다가 켜더라도 유지되도록 해주세요.
  • 디테일뷰에 들어가지 않고도 평점을 확인할 수 있도록, 각 Cell에도 평점을 표시해주세요.

기타 유의사항

  • 코드를 깔끔하게 관리해주세요. 하나의 함수/파일/클래스는 하나의 일만 해야 합니다.
  • 체크리스트에 포함된 내용만 채점할 예정입니다. 그 외 부분은 자유롭게 구현해주세요.
  • 스펙이 변경될 경우에는 슬랙 채널을 통해 공지하겠습니다.
  • 디자인은 스펙을 벗어나지 않는 범위 내에서 자유롭게 구현해주셔도 좋습니다.

참고 키워드

  1. 세미나 자료에 제시된 리팩토링 코드를 참고해보세요.
  2. 위에서 제시한 구조가 정답은 아닙니다. 하나의 방법론을 제시한 것이고, 더 나은 방법이 있다면 적용해보는 것도 나쁘지 않을 것입니다. 다만 이번 과제만 한 번 구조대로 짜보시죠.