전체 글
-
유저 컨트롤과 자유 (User control and Freedom)UXUI/10가지 사용성 휴리스틱 2025. 7. 14. 14:38
Jakob Nielsen의 세 번째 usability heuristic은 ‘사용자 컨트롤과 자유(User control and Freedom)’입니다.사용자는 실수로 잘못된 기능을 눌러 원치 않는 상태에 빠질 수 있습니다. 이때 “비상 탈출구”가 있다면 번거로운 안내 창을 거치지 않고도 즉시 이전 상태로 돌아갈 수 있습니다. 이를 위해 실행 취소(undo)와 재실행(redo) 기능을 제공하여 사용자가 언제든 실수를 바로잡고 자유로이 탐색할 수 있도록 지원해야 합니다. 이러한 기능이 뒷받침되면 사용자는더 자유롭게 UI를 탐색할 수 있고,새로운 기능을 발견하고 학습할 기회가 늘어납니다.이는 결과적으로 사용량과 구매 전환율을 높일 수 있게 됩니다.반면, 이런 제어 기능이 부족하면 사용자는 불편함을 느끼고 서비..
-
시스템과 현실 세계의 일치(Match Between the System and the Real World)UXUI/10가지 사용성 휴리스틱 2025. 7. 13. 20:56
사람들은 낯선 것보다 익숙한 것에서 안도감을 느끼기 때문에, UX에서는 두 번째 Usability Heuristic인 '시스템과 현실 세계의 일치(Match Between the System and the Real World)'가 필수적입니다.시스템은 전문 용어나 내부 용어 대신 사용자에게 익숙한 단어, 구문, 개념으로 소통해야 합니다. 현실 세계의 관습을 따르고 정보를 논리적이고 자연스럽게 제시함으로써 사용자에게 안정감을 줄 수 있습니다. 사용자에게 친숙한 특정 언어 사용 (Using Specific and Familiar Language for Users)UX 디자이너는 단어와 객체에 대한 자신의 해석이 사용자와 일치한다고 가정해서는 안 됩니다.사람들은 각자의 경험과 가치관을 갖고 있어 같은 단어라도..
-
시스템 상태 가시성(Visibility of system status)UXUI/10가지 사용성 휴리스틱 2025. 7. 12. 22:52
Jakob Nielsen의 10가지 Usability Heuristics 중 첫 번째 원칙인 ‘시스템 상태 가시성(Visibility of system status)’은 UI 설계의 영역을 넘어, 사용자와 시스템 사이의 투명한 커뮤니케이션을 강조합니다. 이 원칙은 단순히 화면에 나타나는 로딩 아이콘이나 알림 메시지에만 국한되지 않고, 우리 일상에서 쉽게 접하는 교통 신호등이나 은행 앱의 잔액 표시처럼, 현재 시스템 상태를 알리는 모든 순간에 적용될 수 있습니다. 이처럼 사람들은 더 많은 정보가 더 나은 의사결정을 가능하게 한다고 믿기에, 시스템 상태를 투명하게 알 수 있을 때 안정감과 주도권을 느낍니다. 우리가 일상에서 접하는 시스템들은 어떻게 사용자가 현재 상태를 알 수 있게 해줄까요?스마트폰과 노트북..
-
MediaSessionService - Foreground 음악 재생Android 2024. 5. 23. 23:47
오픈소스인 compose-sample의 Jetcaster는 Android, Wear, TV 등의 다중 플랫폼에 Compose로 음악 플레이어 UI를 구현하는 방법을 제공하고 있는 프로젝트입니다. 현재는 음악 플레이어에 대한 UI만 구현되어 있고, 기능이 구현되어 있지 않아서 이를 구현하여 기여하고 싶었습니다. 이후 여러 플랫폼에서 플레이어를 제어할 수 있는 MediaSession을 구현하기로 결정했습니다. 구조기능 구현에 앞서, Jetcaster는 다중 플랫폼을 지원하기에 프로젝트가 Multi-module 환경으로 되어있습니다.이로 인해 먼저 아래와 같은 구조로 설계를 진행하였습니다.Media Module백그라운드 재생을 설정하려면 별도의 Service 내에 Player와 MediaSession을 ..
-
Compose와 Hilt 의존성 주입Android 2024. 5. 8. 19:37
이 글을 아래 포스팅을 기반으로 필요한 내용만 골라서 작성하였습니다. 자세한 내용은 아래 포스팅을 참고해주세요. Dependency Injection in ComposeLearn how Hilt provides and scopes dependencies in a traditional Android app and Compose changes our approach.medium.com Composable은 클래스가 아닌 간단한 함수로 구성되어 있어, 클래스 기반 의존성 주입 패턴을 사용할 수 없습니다. Composable은 인스턴스화되지 않고 상태를 저장하지 않으며(Stateless), 주로 재사용 가능한 UI 로직을 제공합니다. 그러므로 Composable은 생성자 주입이나 멤버 주입을 사용할 수 없고, ..
-
Compose - Strong skipping modeAndroid 2024. 4. 26. 20:28
이 글은 아래 포스팅을 기반으로 필요한 내용만 골라 작성하였습니다. 자세한 내용은 아래 포스팅을 참고해 주세요. Jetpack Compose: Strong Skipping Mode ExplainedStrong skipping mode changes the rules for what composables can skip recomposition and should greatly reduce recomposition.medium.com ‘Strong skipping mode’는 ‘Compose Compiler 1.5.4’ 이상에서 실험적으로 추가된 기능 중 하나이며, Composable이 ReComposition을 건너뛸 수 있는 조건을 변경함으로써 unstable 파라미터를 가진 Composable의 Re..
-
[ Effective Kotlin ] Chapter 6 - Class design카테고리 없음 2024. 3. 14. 19:27
Item 36 : Prefer composition over inheritance 상속은 객체의 계층 구조가 'is-a' 관계를 갖도록 설계되었다. 단순히 코드를 재사용하기 위해 상속을 사용하는 경우에는 적절하지 않으며, 더 가벼운 방법인 'Composition'을 사용하는 것이 좋다. Simple behavior reuse 예를 들어, 프로그래스바 표시와 숨김을 처리하는 비슷한 로직이 있는 두 클래스가 있고, 이를 상속을 통해 공통된 로직을 추출하면 다음과 같을 것이다. abstract class LoaderWithProgress { fun load() { // show progress innerLoad() // hide progress } abstract fun innerLoad() } class P..
-
Effective Kotlin Chapter 5 - Object creationKotlin 2024. 3. 7. 21:12
Item 33 : Consider factory functions instead of constructors일반적으로 Kotlin에서 클라이언트에게 클래스 인스턴스를 제공하는 방법은 'primary constructor'를 제공하는 것이다.class MyLinkedList(val head: T, val tail: MyLinkedList?)val list = MyLinkedList(1, MyLinkedList(2, null)) 이 외에도 객체를 인스턴스화시키는 다양한 'creational 패턴'이 존재하며, 이런 패턴 대부분은 객체 생성을 함수가 대신하는 아이디어를 중심으로 돌아간다.fun myLinkedListOf(vararg element: T): MyLinkedList? { if (elemen..