전체 글(382)
-
비즈니스 로직이란? 개발자가 꼭 알아야 할 핵심 개념 정리
프로젝트 작성 시 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 -
Kotlin 코딩테스트의 Kick! 우선순위큐 (Priority Queue)
알고리즘 공부를 하면서 은근 자주 쓰게 되는 기능. 우선순위 큐 ~!어떤 것일까?우선순위 큐 (Priority Queue)우선순위가 높은 요소부터 꺼내는 자료 구조기본적으로 힙(Heap) 구조를 사용하여 내부적으로 요소들을 정렬✅ 특징자동 정렬요소를 add()하면 우선순위가 높은 순서로 정렬됨.하지만 poll()을 호출할 때까지 정렬된 상태는 아니며, 꺼낼 때 우선순위에 따라 자동으로 정렬됨.우선순위 기반우선순위가 높은 요소를 먼저 처리하며, 기본적으로 최소 힙(Min-Heap)을 사용.즉, 가장 작은 값을 우선적으로 꺼냄.최대 힙(Max-Heap)을 사용하려면 Comparator를 설정해야함삽입 시간add() 또는 offer()는 O(log n) 시간 복잡도꺼내는 시간poll()은 O(log n) 시간..
2025.02.15 -
[프로그래머스/Kotlin]Lv2 - 디펜스 게임
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다.준호는 처음에 병사 n명을 가지고 있습니다.매 라운드마다 enemy[i]마리의 적이 등장합니다.남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다.예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다.남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이..
2025.02.15