분류 전체보기
-
SOLID - ISP (인터페이스 분리 원칙)Clean Architecture 2026. 1. 11. 18:51
안녕하세요~ 오늘은 SOLID 원칙 중 네 번째, 인터페이스 분리 원칙에 대해 알아보겠습니다! 1. 정의인터페이스 분리 원칙(Interface Segregation Principle)은 클라이언트 자신이 사용하는 기능 단위까지 인터페이스를 작게 분리하는 원칙입니다. 작게 분리하는 이유는, 클라이언트가 자신이 사용하지 않는 메서드에 의존하도록 강제하지 않기 위함인데요. 인터페이스를 적절히 단위로 분리하면 특정 클라이언트가 불필요한 메서드를 구현하는 상황을 방지할 수 있습니다. 이는 결과적으로 클라이언트 코드의 결합도를 낮추고, 시스템의 유연성을 증가시키며 변경 시 영향 범위를 최소화하는 데 도움을 줍니다. 2. 코틀린 위반/준수 예제// ISP 위반interface Worker { fun work()..
-
SOLID - LSP (리스코프 치환 원칙)Clean Architecture 2025. 12. 14. 14:10
안녕하세요~ 오늘은 SOLID 원칙 중 세 번째, LSP 원칙에 대해 알아보겠습니다. 1. 정의와 예시리스코프 치환 원칙(Liskov Substitution Principle)은 리스코프 교수님이 주장한 원칙으로, 하위 클래스는 언제나 상위 클래스를 대체할 수 있어야 한다는 것을 의미합니다. 좀 더 풀어서 설명하자면, 하위 클래스는 상위 클래스가 제공하는 모든 기능을 동일하게 수행해야 하며, 상위 클래스의 동작을 변경하거나 제한해서는 안된다는 것으로, 안정적이고 예측 가능한 코드를 설계하는 데 중요합니다.2. 코틀린 위반/준수 예제// LSP 원칙 위반open class Bird { open fun fly() { println("Bird can fly") }}class Sparro..
-
SOLID - OCP (개방 폐쇄 원칙)Clean Architecture 2025. 11. 30. 12:41
안녕하세요~ 오랜만이네요. 오늘은 SOLID 원칙 중 두 번째인, OCP 원칙에 대해 알아보겠습니다!1. OCP 원칙이란?OCP 원칙은 Open-Closed Principle 의 약어로, 개방 폐쇄 원칙을 의미합니다. 여기서 개방과 폐쇄는 무엇을 가리킬까요? 기능 확장에는 개방되어 있어야(열려 있어야) 하고, 기능 수정에는 폐쇄되어 있어야(닫혀 있어야) 한다는걸 말합니다. 다시 말해, 새로운 기능을 추가할 때는 기존 코드를 변경하지 않고, 코드를 확장하는 방식으로 처리해야 한다는 것입니다. 2. OCP 원칙 위반/준수 예제 (코틀린)// OCP 위반class Notifier { fun send(type: String, message: String) { when(type) { ..
-
SOLID - SRP (단일 책임 원칙)Clean Architecture 2025. 10. 5. 23:07
안녕하세요! 오늘은 SOLID 원칙이라는 따끈따끈한(?) 새로운 주제를 가져왔습니다! 한번 알아볼까요?1. SOLID 원칙이란?취업 준비할 때 면접 단계에서 자주 나오는 단골 질문 중에 하나죠. 저도 관련 인턴 공고 조건에서도 SOLID 원칙에 대한 이해를 자격 요건으로 두는 경우를 가끔씩 보았던 것 같습니다. SOLID 원칙은 객체 지향 프로그래밍에서 견고하고 유지보수 가능한 프로젝트를 설계하기 위한 원칙입니다. SRP, OCP, LSP, ISP, DIP 이렇게 5가지 원칙의 앞글자를 따서 만들었습니다. 클린 아키텍처의 기반이 되며, 모듈화 계층화를 통해 코드의 유연성과 확장성을 높일 수 있습니다. 2. SRP 란?SOLID의 첫 번째 원칙인 단일 책임 원칙(Single Responsibility Pr..
-
사용자 수면 시간 추적하기Android 2025. 8. 31. 21:15
안녕하세요. 오늘은 사용자의 수면 시간을 추적하는 원리에 대해 한번 소개해볼려고 합니다!1. 사용자가 잠든 시각 추적하기시스템 정보로부터 사용자가 잠든 시간을 추적해 볼 수 있습니다. 하나씩 살펴보겠습니다!1-1. 매니저 받아오기/사용 권한 받아오기val usageStatsManager = getSystemService(USAGE_STATS_SERVICE) as UsageStatsManager 안드로이드에서 getSystemService() 호출할 때, 어떤 종류의 시스템 서비스 객체를 얻고 싶은지 문자열 상수로 지정해줘야 합니다. USAGE_STATS_SERVICE 상수를 통해 앱 사용 통계 관련 서비스를 요청합니다. 이때, UsageStatsManager는 안드로이드에서 앱 사용 기록, 화면 사용 시..
-
UI 레이어란?Clean Architecture 2025. 8. 24. 22:00
안녕하세요~ 오늘은 클린 아키텍처의 마지막 레이어, UI 레이어에 대해 알아보겠습니다! 1. UI 레이어란?UI 레이어는 User Interface 레이어의 준말입니다. Presentation 레이어와 상호작용하는데, viewmodel을 통해 데이터를 받아와 화면 UI에 표시하거나 사용자의 액션을 viewModel로 전달하는 인터페이스 역할을 합니다. 2. XML vs Composexml과 compose 둘 다 'UI를 구현한다'는 공통점이 있는데요. 기존 레거시 뷰로 xml 을 많이 사용했었지만 선언형 UI인 compose도 많은 장점이 있습니다. 상태를 mutablestate 로 지정하여 변경되었을 때 자동으로 recomposition을 해주는 점에서 상태 관리가 더욱 용이합니다. 프리뷰(Previ..
-
Presentation 레이어란?Clean Architecture 2025. 8. 17. 21:46
안녕하세요~ 오늘은 안드로이드 클린 아키텍처의 Presentation 레이어에 대해서 알아보겠습니다! 1. Presentation layer의 역할프레젠테이션 레이어는 UI 레이어와 도메인 레이어 사이에 존재하는데요. 도메인 레이어의 UseCase를 사용하여 데이터를 가져와 UI 레이어로 전달하거나, 반대로 UI의 사용자 액션(버튼 클릭 등)을 처리해서 도메인 레이어에 전달하는 중간다리 역할을 한다고 보시면 됩니다! 2. Presentation layer의 뷰모델프레젠테이션 레이어에는 Model과 Model Mapper도 있지만, 뷰모델(ViewModel) 역할이 큰데요. 주로 MVVM 패턴의 뷰모델이 사용됩니다. 먼저 관련 코드를 한번 보겠습니다.class UserViewModel(): ViewMod..
-
Local 레이어란?Clean Architecture 2025. 8. 10. 20:40
안녕하세요~ 저번주에는 데이터 레이어를 의존하는 원격 레이어에 대해서 알아봤었는데요. 오늘은 데이터 레이어를 의존하는 또 다른 레이어인 로컬 레이어에 대해서 알아보려고 합니다. 1. 로컬 레이어 정의와 구성요소로컬 레이어는 로컬 데이터를 저장하고 읽어오는 계층으로 DB, SharedPreferences, 파일 시스템으로 관리합니다. 로컬 레이어의 구성요소로는 DataSource Implementation, Database, Local model, Local Model Mapper가 있습니다. 하나씩 살펴보겠습니다. 2. DataSource Implementationclass UserLocalDataSourceImpl( private val userDao: UserDao, private val ..