전체 글
-
의존성 주입이란?어플리케이션 2026. 8. 23. 17:06
안녕하세요 버드리입니다~ 🐦 이번 글에서는 의존성과 의존성 주입의 개념에 대해 알아보겠습니다! 1. 의존성이란?의존성이란 어떤 대상(클라이언트)이 자신의 기능을 수행하기 위해 참조하는 다른 객체나 함수를 의미합니다.사용자에게 알림을 보내는 예시를 들어보겠습니다.class NotificationService { ... }class UserManager { private val notificationService = NotificationService() fun triggerEvent() { notificationService.send("띵동! 고객님만을 위한 특별한 제품이 있어요!") }} UserManager는 이벤트를 시작할 때 사용자에게 알림을 보내기 위해서 Noti..
-
SOLID - DIP (의존성 역전 원칙)어플리케이션 2026. 8. 9. 21:31
안녕하세요~ 오랜만이네요 오늘은 SOLID의 마지막 원칙인 의존성 역전 원칙(DIP)에 대해 알아보겠습니다! 의존성 역전 원칙(Dependency Inversion Principle, DIP)고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다. 다시 풀어서 설명하자면,안쪽에 있는 상위 계층이 바깥에 있는 하위 계층의 구체적인 구현에 직접 의존하지 않도록 하고, 인터페이스를 통해 의존해야 한다. 라고 이해할 수 있습니다. 그렇다면 왜 이렇게 해야 할까요?바로 변경에 유연하게 대응하고, 모듈 간 결합도를 낮추기 위해서입니다.상위 계층이 하위 계층의 구체적인 구현에 직접 의존하고 있다면, 하위 계층이 변경될 때 상위 계층까지 함께 수정해야 할 수 있습니다. 반대로 추상화에 의존하도..
-
SOLID - ISP (인터페이스 분리 원칙)어플리케이션 2026. 1. 11. 18:51
안녕하세요~ 오늘은 SOLID 원칙 중 네 번째, 인터페이스 분리 원칙에 대해 알아보겠습니다! 1. 정의인터페이스 분리 원칙(Interface Segregation Principle)은 클라이언트 자신이 사용하는 기능 단위까지 인터페이스를 작게 분리하는 원칙입니다. 작게 분리하는 이유는, 클라이언트가 자신이 사용하지 않는 메서드에 의존하도록 강제하지 않기 위함인데요. 인터페이스를 적절히 단위로 분리하면 특정 클라이언트가 불필요한 메서드를 구현하는 상황을 방지할 수 있습니다. 이는 결과적으로 클라이언트 코드의 결합도를 낮추고, 시스템의 유연성을 증가시키며 변경 시 영향 범위를 최소화하는 데 도움을 줍니다. 2. 코틀린 위반/준수 예제// ISP 위반interface Worker { fun work()..
-
SOLID - LSP (리스코프 치환 원칙)어플리케이션 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 (개방 폐쇄 원칙)어플리케이션 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 (단일 책임 원칙)어플리케이션 2025. 10. 5. 23:07
안녕하세요! 오늘은 SOLID 원칙이라는 따끈따끈한(?) 새로운 주제를 가져왔습니다! 한번 알아볼까요?1. SOLID 원칙이란?SOLID 원칙은 객체 지향 프로그래밍에서 견고하고 유지보수 가능한 프로젝트를 설계하기 위한 원칙입니다. SRP, OCP, LSP, ISP, DIP 이렇게 5가지 원칙의 앞글자를 따서 만들었습니다. 클린 아키텍처의 기반이 되며, 모듈화 계층화를 통해 코드의 유연성과 확장성을 높일 수 있습니다. 2. SRP 란?SOLID의 첫 번째 원칙인 단일 책임 원칙(Single Responsibility Principle)입니다. 말 그대로 여러 개의 책임이 아니라 단일 책임만을 갖는 것인데요. 안드로이드에서 SRP는 클래스가 하나의 책임만 가지며, 오직 하나의 이유로만 변경되는 것을 의미합..
-
사용자 수면 시간 추적하기어플리케이션 2025. 8. 31. 21:15
안녕하세요. 오늘은 사용자의 수면 시간을 추적하는 원리에 대해 한번 소개해볼려고 합니다!1. 사용자가 잠든 시각 추적하기시스템 정보로부터 사용자가 잠든 시간을 추적해 볼 수 있습니다. 하나씩 살펴보겠습니다!1-1. 매니저 받아오기/사용 권한 받아오기val usageStatsManager = getSystemService(USAGE_STATS_SERVICE) as UsageStatsManager 안드로이드에서 getSystemService() 호출할 때, 어떤 종류의 시스템 서비스 객체를 얻고 싶은지 문자열 상수로 지정해줘야 합니다. USAGE_STATS_SERVICE 상수를 통해 앱 사용 통계 관련 서비스를 요청합니다. 이때, UsageStatsManager는 안드로이드에서 앱 사용 기록, 화면 사용 시..
-
UI 레이어란?어플리케이션 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..