뿌셔뿌셔(354)
-
[프로그래머스/Kotlin]Lv2 - 서버 증설 횟수
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제문제 설명당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 ..
2025.02.23 -
UseCase 사용의 이유, ViewModel에서 Repository를 직접 연결하면 안될까?
Nia 프로젝트를 참고하여 Network 모듈을 만들고 API를 연결하고 있었는데,ViewModel에서 어떤건 Repository를 직접 연결하고 어떤건 UseCase를 이용하여 통신을 했다.그렇다면 이 두개는 어떤 기준으로 달라진걸까?1. Repository는 언제 사용하는가?Repository는 “데이터를 어떻게 가져올 것인지”에 대한 역할을 한다.따라서 Repository를 바로 연결하는 것은 단순 데이터 조회인 경우에 사용할 수 있다.1️⃣ 구조ViewModel → Repository → DataSource (API, DB 등)2️⃣ 장점구조가 단순하여 코드가 직관적이다.작은 규모의 프로젝트에서 빠르게 개발할 수 있다.3️⃣ 단점ViewModel이 비즈니스 로직을 직접 다루게 되어 책임이 증가함...
2025.02.21 -
비즈니스 로직이란? 개발자가 꼭 알아야 할 핵심 개념 정리
프로젝트 작성 시 Clean Architecture를 기반으로 작성을 하고 있다.이 때, 비즈니스 로직은 Domain 계층에 있는 UseCase가 담당한다.그렇다면 여기서 말하는 비즈니스 로직은 무엇일까?0. 비즈니스 로직이란?비즈니스 로직(Business Logic)은 소프트웨어가 비즈니스 목표를 달성하기 위해 수행하는 핵심적인 규칙과 연산을 담당하는 부분이다.즉, 사용자의 입력을 받아 데이터 처리 후 결과를 반환하는 과정에서 "어떤 데이터를 어떻게 처리할지" 결정하는 로직이다.1. 비즈니스 로직의 역할비즈니스 로직은 단순한 데이터 저장/조회가 아니라, 도메인 규칙을 적용하고 데이터를 가공하는 역할을 한다.예시 1: 온라인 쇼핑몰 주문 시스템사용자가 장바구니에 상품 추가주문 요청 시 결제 금액 검증 (..
2025.02.20 -
네트워크 API 통신할 때 suspend 함수 vs Flow
현재 나는 Nia(Now In Android) 프로젝트를 보면서 신규 프로젝트 구조를 설계하고 있다.이걸 보는데 flow와 suspend 함수가 마구 뒤섞여져 있었다.그럼 나는 어떤걸 기준으로 작업을 진행해야 할까?1️⃣ suspend 함수란?suspend 함수는 코루틴(Coroutine)에서 사용되는 특수한 함수이다.코루틴에 대한 설명은 👉 https://anovice-dp.tistory.com/348suspend 함수는 일시중단(suspending)이 가능한 함수이다.즉, 실행을 멈췄다가 다시 재개할 수 있다.✅ 주요 특징비동기 작업을 쉽게 표현suspend 함수는 일반적인 함수처럼 보이지만, 내부적으로 비동기 작업을 수행네트워크 요청, DB 쿼리 같이 시간이 오래 걸리는 작업에 유리직관적인 코드a..
2025.02.19 -
설계 패턴에서 Interface와 implementation을 쓰는 이유
아키텍처 설계를 하는데 굳이 Interface와 구현 클래스를 나누는 이유는 무엇일까 궁금해졌다.Kotlin에서는 이것이 일반적인 방식의 설계 패턴인데, 유연한 구조를 만들고 유지보수가 편해진다.1️⃣ 유지보수 & 확장성예제 1: 인터페이스 없이 직접 구현한 경우class LoginRepository @Inject constructor( private val api: LoginNetworkApi) { suspend fun getLoginData(): LoginClientModel { return api.getLoginData() }}이렇게 하면 LoginRepository 안에서 직접 LoginNetworkApi를 사용하니까 나중에 구현을 바꾸기 어려움예제 2: interfa..
2025.02.18 -
Retrofit Singleton 패턴을 유지하면서 ApiService를 기능별로 분리하기
Retrofit을 이용하여 API 통신을 하려면 Retrofit 객체를 만들어야 한다.이 때, 객체에 BaseURL을 주입해줘야 하는데 대부분의 프로젝트에서는 url이 하나로 통일되지는 않을 것이다.게다가 앱 규모가 커질수록 API 호출 개수는 무수히 많아지는데이걸 하나의 파일에서 관리하기는 불가능.Retrofit 객체를 싱글톤으로 유지하면서 APIService를 기능별로 분리하려면 어떻게 해야할까?1️⃣ API 인터페이스를 기능별로 분리각 도메인(feature)별로 @Headers를 추가해서 Base URL을 구분하면 된다.✅ AServiceinterface AService { @GET("endpoint-a") @Headers("Base-Url: API_A") suspend fun ge..
2025.02.17