'붐비미'프로젝트 리팩토링

이도현·2023년 8월 17일
0
post-thumbnail

0. 개요

융복합 PJT를 하며 주먹구구로 프로젝트를 마무리했다. 내가 구현했던 부분들만 가져와 좀만 수정하면 어플을 구글스토어에 배포할 수 있을 것 같다.
본인이 구현한 부분
1) Android app 제작
2) Django 서버 구축

우선 클린 아키텍처를 적용해야한다. 기존의 소스코드는 'app' 하나로 구성되어 있어 결합도가 너무 높다.
그리고 Jetpack Compose로 UI를 선언형 UI이로 교체해줘야한다.

1. 안드로이드 클린 아키텍처 적용

1) 모듈 분리

  • data, domain, presentation 이렇게 세 모듈로 분리

2) Entitiy 생성

  • domain 모듈에서 애플리케이션의 핵심 엔터티 정의

    Entity란? 데이터 모델링에서 사용되는 객체, 어떤 것이란 데이터베이스의 테이블 따위

3) Use Cases 정의

  • 'dmoain' 모듈에서 필요한 비지니스 로직에 따라 Use Cases를 정의

    비지니스 로직이란? 어플리케이션의 핵심적인 규칙과 연산. 예를 들어, 온라인 쇼핑몰 앱에서 주문 금액이 10만원 이상일 경우 10% 할인을 받는다면 이 할인 계산은 비지니스 로직의 일부
    (비지니스 로직은 데이터와 사용자 인터페이스로부터 독립적이어야 하며, 이를 통해 재사용성과 테스트 용이성이 향상)

Use Cases란? 클린 아키텍처에서 어플리케이션의 비지니스 로직을 표현하는데 사용
각 Use Case는 하나의 특정작업(예: 위치 정보 호출하기, Push알림 보내기 등)
Use Cases는 필요한 데이터와 관련된 연산을 수행하기 위해 외부 시스템(예: 데이터베이스, 네트워크)과의 통신이 필요한 경우, 이를 위한 인터페이스(예: Repository)를 사용

4) Respository 인터페이스 정의

  • 'domain' 모듈에서 데이터에 접근하기 위한 인터페이스를 정의, 이 인터페이스의 구현은 'data' 모듈에 있을 것

5) Repository 구현

  • 'data' 모듈에서 Repository 인터페이스를 구현. 여기에서 데이터베이스, 네트워크, 기타 외부소스와의 통신이 이루어진다.

6) Presentation 레이어 구성

  • 'presentation'모듈에서 UI와 관련된 코드(액티비티, 프래그먼트, 뷰모델 등)를 작성. MVVM, MVP 등의 디자인 패턴을 사용하여 뷰와 비지니스 로직을 분리하는 것이 좋다.

7) DI(Dependency Injection)

  • Hilt 라이브러리를 사용하여 의존성 주입. 이를 통해 레이어 간의 결합도를 낮추고 유닛 테스팅을 용이하게 함.

    유닛 테스팅이란? 소프트웨어의 특정부분(일반적으로 함수나 메서드)이 예상대로 작동하하는지 확인하기 위한 테스트. 유닛테스팅은 코드의 품질을 확보하고, 리팩토링이나 기능 추가 시 발생할 수 있는 오류를 빠르게 찾아내기 위한 중요한 도구

8) 유닛 테스팅

  • 각 레이어를 독립적으로 테스트할 수 있게 되면 유닛 테스팅을 적용.
  • 클린 아키텍처의 주요 장점 중 하나는 각 레이어의 독립적인 테스트가 가능하다는 것
  • JUnit 활용
profile
좋은 지식 나누어요

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

유익한 자료 감사합니다.

답글 달기