전체 글

과제/우테코 6기 프리코스

우테코 6기 프리코스 안드로이드 - 2주차 미션

자동차 경주 게임 이번 주차의 미션은 '자동차 경주 게임' 프로그램 구현이다. 기능구현 측면에서 저번 주차의 '숫자 야구 게임'과 비슷하다. 이번 주차는 학습 목표로 '함수를 분리하는 것'과 '함수별로 테스트를 작성하는 것'이 추가되었다. '숫자 야구 게임'에서 함수를 분리하는 것은 신경썼었지만 테스트 코드는 충분히 고민해보지 못해 아쉬웠는데 학습 목표로 추가되어 테스트코드에 대해 좀 더 집중해서 미션을 수행해보려고 한다. 테스트 코드에 대한 의문 프로그램에 대한 설계를 빠르게 마치고 구현 기능 목록을 작성한 다음에 기능 구현에 들어갔다. 기능 구현 자체는 어렵지 않았지만 저번 주차처럼 테스트 코드를 작성해봤지만 뭔가 찝찝함이 들었다. 테스트 코드는 언제 작성해야 하는 것일까? 기능 구현 전? 기능 구현..

프로젝트/마스크 알라미

4년 전 코드 리팩토링하기 (4) - Repository 패턴

Repository 패턴 적용 기존에는 MainService가 외부 서버에서 데이터를 받아와 MainActivity에게 전달해줬었다. MainService안에서 Retrofit를 활용해 한 번에 데이터를 불러왔지만 Repository 패턴을 적용하여 데이터 로드 과정을 계층화하려고 한다. UI 레이어의 MapViewModel이 데이터 레이어의 MaskAlarmiRepository에게 Store 리스트를 요청했다. 그 순간 데이터 레이어에서는 어떤 일이 생기는 걸까? 데이터 레이어에서는 UI 레이어가 요청한 데이터만 잘 전달하면 된다. UI는 데이터의 출처가 어디인지 몰라도 된다. 레포지토리는 외부 저장소인지 내부 저장소인지를 선택해 저장소에서 데이터를 요청한다. 저장소에서 가져온 데이터를 UI 레이어에게..

프로젝트/마스크 알라미

4년 전 코드 리팩토링하기 (3) - MVVM 패턴

MapViewModel 추가 : 비즈니스 로직 분리 이전 코드에서는 MainActivity에서 네트워크 호출을 하는 MainService 객체를 생성해 앱에 필요한 데이터를 불러와 마커를 생성했다. 데이터를 불러오는 로직을 ViewModel이 수행하게끔 수정했다. ViewModel은 데이터를 가져오고 앱의 상태 데이터들을 보유하고 관리한다. 그리고 UI는 ViewModel의 앱 상태에 의해 UI 요소를 변경한다. 즉, ViewModel은 UI와 데이터간의 상호작용을 담당하는 역할이다. Store 리스트 데이터를 저장하고 관리할 수 있는 ViewModel 클래스를 추가해줬다. Jetpack의 ViewModel를 상속받는 MapViewModel 클래스 타입을 정의해줬다. private const val RA..

소프트웨어 공학/아키텍처

클린 아키텍처 Clean Architecture

클린 아키텍처란? 클린 아키텍처는 무엇을 말하는 걸까요? 그리고 왜 사용하는 걸까요? 클린 아키텍처는 Robert C. Martin이 제안한 아키텍처로 "소프트웨어 시스템의 구조를 비즈니스 규칙 중심으로 설계하고, 유지보수성, 테스트 용이성, 확장성을 강조하는 아키텍처 패턴"입니다. 위의 그림처럼 외부 원에서 내부 원 방향으로 화살표가 향하는 것을 볼 수 있습니다. 이는 🔗의존성 방향으로 원 중앙으로 갈수록 "내부는 외부를 의존하지 않는다", "내부는 외부가 뭘 하는지 모른다"라는 의미입니다. 비즈니스 규칙 중심으로 설계한다는 말은 비즈니스가 가장 중요한 부분이므로 외부의 영향을 받지 않도록 설계한다는 말입니다. 즉, 비즈니스 또는 내부는 외부에 의존하지 않고 고유하게 작동되도록 관심사를 분리해 설계하는..

소프트웨어 공학

의존성

의존성이란? 소프트웨어 공학에서 의존성은 한 요소가 다른 요소에 의해 영향을 받거나 연결되는 상태 또는 관계를 나타내는 개념입니다. 주로 모듈, 클래스, 함수, 객체와 같은 소프트웨어 구성 요소 간의 상호 작용과 관련이 있습니다. 소프트웨어 설계, 아키텍쳐, 모듈화, 테스트, 유지보수, 확장성, 리팩토링 등 다양한 측면에서 의존성을 이해하고 관리하는 것이 중요합니다. 의존성 관리는 코드의 구조와 아키텍처를 개선하고 효율적인 소프트웨어 개발을 하는데 이해해야 하는 필수적인 개념 중 하나입니다. 의존성과 관련된 다양한 원칙과 설계 패턴이 존재하며 그 중 대표적으로 Robert C. Martin이 제안한 클린 아키텍쳐가 의존성의 개념을 효과적으로 다룬 아키텍처입니다. 의존성을 커피머신과 바리스타의 관계로 설명..

프로젝트/마스크 알라미

4년 전 코드 리팩토링하기 (2) - 아키텍처 재설계

4년 전 코드의 문제점 '마스크 알라미' 앱에서 제일 중요한 로직은 아래와 같다. "판매처(Store) 데이터를 외부에서 제공받아 재고량, 위경도 값을 추출해 마커로 만든 뒤 지도에 렌더링한다" 이를 위해 앱에서 해줘야 할 일은 다음과 같다. 서버(외부 리소스)에 데이터 요청하기 요청이 성공했는지 실패했는지 구분 데이터를 응답받으면 필요한 값을 추출해 마커로 만들기 생성된 마커들을 맵 UI에 렌더링하기 앱에서 이러한 행위들을 하기 위해 나는 어떻게 구조를 설계하고 코드를 작성했을까? 더보기 MainActivity public class MainActivity extends BaseActivity implements MainActivityView { private ArrayList mM..

minux.
minux.log