다크 모드(다크 테마)는 화면 배경이 어둡게(진한 회색 또는 검은색) 되고 텍스트와 요소가 밝아지는 색상 구성표입니다. 다크 모드는 약한 조명에서 눈의 피로를 줄이고, OLED 디스플레이에서 배터리 충전을 절약하며(Google, 2019년 데이터에 따르면 최대 60%), 광과민증이 있는 사용자의 접근성 요구 사항을 충족합니다. iOS 13 및 Android 10에서 다크 모드는 시스템 옵션이 되었습니다. 사용자가 전역적으로 다크 테마를 활성화하면 애플리케이션이 자동으로 이를 적용합니다. 자세한 내용은 Android 다크 테마 공식 문서를 참조하세요.
핵심 포인트
다크 모드는 화면 배경이 어둡고(일반적으로 Android에서는 #121212, iOS에서는 #1C1C1E), 텍스트와 인터페이스 요소가 밝은 색상 구성표입니다. 단순한 색상 반전과 달리, 고품질 다크 모드는 신중하게 선택된 팔레트를 사용합니다. 순수한 검정 대신 진한 회색 배경(헤일로 효과 감소), 채도가 낮은 악센트 색상, 부드러운 그림자입니다. 시스템 수준의 다크 모드 지원은 iOS 13(2019년 9월)과 Android 10(2019년 9월)에 도입되었습니다.
도입의 주요 이유는 사용자의 편안함입니다. 약한 조명(저녁, 어둠 속)에서 밝은 흰색 화면은 눈의 피로를 유발하고 두통을 일으킬 수 있습니다. 다크 모드는 가독성을 희생하지 않으면서 화면 밝기를 줄입니다. 광과민증이나 빛에 민감한 사용자에게 다크 테마는 옵션이 아니라 애플리케이션을 편안하게 사용할 수 있는 유일한 방법입니다. Android Developers에 따르면 Android 사용자의 30% 이상이 항상 다크 테마를 활성화합니다.
다크 모드는 OLED 화면에서 배터리를 절약합니다. LCD는 백라이트가 항상 켜져 있는 반면, OLED 픽셀은 자체적으로 빛을 냅니다. 어두운 색상은 픽셀이 꺼져 있음을 의미하며 전력 소비가 감소합니다. Google(Android Developers Blog, 2019)에 따르면, OLED 디스플레이가 장착된 Pixel에서 100% 밝기의 다크 모드는 라이트 테마와 비교하여 전력 소비를 60% 줄입니다. LCD 화면에서는 매트릭스 백라이트가 픽셀 색상과 독립적으로 작동하므로 절약 효과가 미미합니다(약 3~5%).
시스템 지원은 여러 단계를 거쳤습니다. iOS 13(2019년)은 UIUserInterfaceStyle을 통해 전역 다크 테마를 도입했습니다. Android 10(2019년)은 자체 다크 테마가 없는 애플리케이션을 위해 Force Dark Mode를 추가했습니다. Android 12(2021년)의 Material You는 배경화면에서 자동으로 다크 팔레트를 생성하기 시작했습니다. iOS 15(2021년)는 Safari 및 웹 콘텐츠용 API를 확장했습니다. StatCounter(2026년)에 따르면 App Store 및 Google Play의 상위 100개 애플리케이션 중 82%가 다크 모드를 지원합니다.
| 플랫폼 | 버전 | 연도 | 주요 혁신 |
|---|---|---|---|
| iOS | 13 | 2019 | UIUserInterfaceStyle, traitCollection.userInterfaceStyle |
| Android | 10 (Q) | 2019 | Force Dark Mode, AppCompat DayNight 테마 |
| iOS | 15 | 2021 | 웹 콘텐츠 및 Safari용 다크 테마 |
| Android | 12 | 2021 | 자동 생성 다크 팔레트를 갖춘 Material You Dynamic Themes |
iOS 다크 모드 API는 UITraitEnvironment 프로토콜을 기반으로 합니다. 모든 UIViewController 및 UIView에는 .unspecified, .light 또는 .dark가 될 수 있는 traitCollection.userInterfaceStyle 속성이 있습니다. 시스템 테마가 변경되면 iOS는 traitCollectionDidChange(_:) 메서드를 호출합니다. 개발자는 이 메서드에서 색상을 업데이트하거나, 밝은 팔레트와 어두운 팔레트 사이를 자동으로 전환하는 동적 색상(UIColor(dynamicProvider:))을 사용해야 합니다.
class ViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
override func traitCollectionDidChange(_: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
updateColors()
}
}
func updateColors() {
let isDark = traitCollection.userInterfaceStyle == .dark
view.backgroundColor = isDark ? UIColor(named: "darkBackground") : .systemBackground
titleLabel.textColor = isDark ? .white : .darkText
}
}
// 다크 모드 강제 활성화
window.overrideUserInterfaceStyle = .dark
동적 색상은 iOS에서 다크 모드를 구현하는 가장 좋은 방법입니다. UIColor(named:)는 .light 및 .dark 모양에 대해 Asset Catalog에서 자동으로 다른 값을 로드합니다. Assets.xcassets에서 두 가지 변형(Any Appearance + Dark Appearance)으로 색상을 정의하기만 하면 UIKit이 자동으로 올바른 색상을 선택합니다. 동적 시스템 색상(UIColor.systemBackground, .label, .secondaryLabel)은 이미 다크 모드를 지원하며 자동으로 변경됩니다.
SwiftUI는 다크 모드를 기본적으로 지원합니다. 모든 표준 색상 및 수정자(Color.primary, .background, Color(UIColor.systemBackground))가 자동으로 적용됩니다. 사용자 정의 색상의 경우 동적 UIColor와 함께 Color(uiColor:)를 사용하거나 @Environment(\.colorScheme) 변수를 사용하여 테마를 명시적으로 확인합니다. SwiftUI View는 traitCollectionDidChange를 호출하지 않고도 테마 변경 시 자동으로 다시 그려집니다.
struct ThemeView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("다크 모드")
.foregroundColor(colorScheme == .dark ? .white : .black)
.background(colorScheme == .dark ? Color(.systemGray6) : .white)
}
}
Android 다크 모드는 AppCompat 라이브러리와 Theme.AppCompat.DayNight 테마를 통해 구현됩니다. 낮에는 라이트 테마가, 밤에는 다크 테마가 사용됩니다. 강제 활성화는 AppCompatDelegate.setDefaultNightMode()를 통해 설정됩니다: MODE_NIGHT_YES(다크), MODE_NIGHT_NO(라이트), MODE_NIGHT_FOLLOW_SYSTEM(시스템). 리소스는 라이트(res/values/styles.xml)와 다크(res/values-night/styles.xml)로 나뉩니다.
// 다크 테마 강제 활성화
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate 전에 설정
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES
)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
// 현재 테마 확인
private val isDarkMode: Boolean
get() = (resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK) ==
Configuration.UI_MODE_NIGHT_YES
}
// AndroidManifest.xml에 나이트 모드 등록
// android:configChanges="uiMode"
Force Dark Mode는 Android 10+의 시스템 기능으로, 다크 테마를 지원하지 않는 애플리케이션의 색상을 자동으로 반전시킵니다. 개발자 옵션 또는 테마의 android:forceDarkAllowed="true" 속성을 통해 활성화됩니다. 이는 임시 솔루션입니다. 프로덕션의 경우 values-night를 통해 자체 다크 팔레트를 구현해야 합니다. 그렇지 않으면 시각적 품질이 저하됩니다(반전된 아이콘, 읽기 어려운 색상).
Material You(Android 12+)는 기기 배경화면에서 5가지 주요 색상(primary, secondary, tertiary, neutral, neutralVariant)을 자동으로 생성합니다. 각 색상에 대해 라이트 팔레트와 다크 팔레트가 생성됩니다. 개발자는 속성(?attr/colorPrimary, ?attr/colorOnPrimary, ?attr/colorSurface)을 사용합니다. 시스템이 현재 테마에 맞는 변형을 자체적으로 선택합니다. Dynamic Color는 Material Design 3(com.google.android.material:material 구성 요소)과 함께 Android 12+에서 지원됩니다.
// values/themes.xml — 라이트 테마
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_light</item>
<item name="colorOnPrimary">@color/on_primary_light</item>
</style>
// values-night/themes.xml — 다크 테마
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_dark</item>
<item name="colorOnPrimary">@color/on_primary_dark</item>
</style>
다크 모드 디자인은 단순한 색상 반전이 아닙니다. Google Material Design은 순수한 검정 대신 진한 회색(#121212)을 사용할 것을 권장합니다. 순수한 검정(#000000)은 흰색 텍스트와 너무 높은 대비를 만들어 헤일로 효과(글자 주변의 후광)를 유발합니다. 요소의 높낮이는 색상으로 표현됩니다. 요소가 높을수록 배경이 밝아집니다. 배경 위의 카드는 #1E1E1E, 대화상자는 #2D2D2D, 탐색 패널은 #383838입니다.
색상 대비는 다크 모드에서 라이트 모드보다 낮아야 합니다. Material Design 권장 사항: 기본 텍스트 — 흰색(#FFFFFF) 불투명도 87%, 보조 — 60%, 비활성화 — 38%. 악센트 색상은 채도가 낮아야 합니다. 라이트 테마에서 primary = #6200EE인 경우 다크 테마에서는 #BB86FC(밝고 부드러운 보라색)입니다. WCAG 2.1에 따르면 일반 텍스트의 최소 대비 4.5:1이 두 테마 모두에서 유지되어야 합니다.
| 요소 | 라이트 모드 | 다크 모드 | 대비 |
|---|---|---|---|
| 화면 배경 | #FFFFFF | #121212 | — |
| 카드 | #F5F5F5 | #1E1E1E | 높이 1dp |
| 기본 텍스트 | #000000 87% | #FFFFFF 87% | 15.8:1 |
| 보조 텍스트 | #000000 60% | #FFFFFF 60% | 9.0:1 |
| 기본 색상 | #6200EE | #BB86FC | 7.2:1 |
이미지 및 아이콘은 다크 테마에서 별도 처리가 필요합니다. 투명도가 있는 아이콘은 밝은 색상으로 다시 칠해야 합니다. 배경이 밝은 사진은 눈부심을 유발할 수 있습니다. 밝기를 20~30% 줄이거나 반투명 오버레이를 추가하는 것이 좋습니다. 로고 및 브랜드 요소에는 어두운 배경용 버전을 사용하세요. iOS Asset Catalog 및 Android VectorDrawable은 라이트 테마와 다크 테마에 대해 별도의 리소스를 지원합니다.
테마 선택은 사용 조건, 콘텐츠 유형 및 사용자 선호도에 따라 다릅니다. Nielsen Norman Group(2020년)의 연구에 따르면, 일반 조명에서 라이트 모드는 15~20% 더 높은 읽기 속도를 제공합니다. 그러나 약한 조명 조건에서는 다크 모드가 눈의 피로를 줄이고 가독성을 향상시킵니다. 많은 양의 텍스트(기사, 문서)가 포함된 인터페이스의 경우 일반적으로 라이트 모드가 더 좋습니다.
전력 소비는 OLED에서 다크 모드의 핵심 논거입니다. Google(2019년)에 따르면 OLED 화면에서 다크 테마의 YouTube는 라이트 테마보다 43% 적은 에너지를 소비합니다. Google Maps는 32%입니다. 인터페이스가 밝을수록 그리고 화면 밝기 수준이 높을수록 절약 효과가 커집니다. LCD 화면에서는 절약 효과가 5%를 초과하지 않습니다. 야외의 강한 햇빛에서 애플리케이션을 많이 사용하는 사용자의 경우 라이트 모드가 유일한 읽기 가능한 옵션입니다.
| 기준 | 다크 모드 | 라이트 모드 |
|---|---|---|
| 밝은 빛에서의 가독성 | 낮음(어두운 배경의 눈부심) | 높음(최대 대비) |
| 어둠 속에서의 눈 피로 | 낮음 | 높음(밝은 빛) |
| OLED 전력 소비 | 낮음(최대 -60%) | 높음 |
| LCD 전력 소비 | 유사함(±5%) | 유사함(±5%) |
| 색상 인식 | 왜곡됨(채도 감소) | 자연스러움 |
| 적응 | 적응 시간 필요 | 눈에 자연스러움 |
IT Sectr 권장 사항 — 당사는 전환 옵션(시스템 따르기, 다크, 라이트)과 함께 두 테마를 모두 구현합니다. 자동 전환이 유일한 옵션이 되어서는 안 됩니다. 사용자는 낮에 다크 테마(편두통 때문에)나 밤에 라이트 테마(독서 때문에)를 원할 수 있습니다. 당사 프로젝트에서는 프로필 설정에 테마 전환기를 추가하고 선택을 기억합니다. 프리미엄 콘텐츠(사진, 비디오)가 있는 애플리케이션의 경우 적용 전에 테마 미리보기를 권장합니다.
자주 묻는 질문
네, OLED 화면에서는 최대 60%까지 절약할 수 있습니다(Google, Pixel, 2019). 인터페이스가 밝을수록 절약 효과가 커집니다. LCD 화면에서는 매트릭스 백라이트가 픽셀 색상과 독립적으로 작동하므로 차이가 미미합니다(최대 5%). 사용자가 주로 흰색 요소가 많은 애플리케이션을 적극적으로 사용하는 경우 다크 모드가 최대 효과를 발휘합니다.
다크 모드는 어두운 인터페이스 방식의 일반적인 개념입니다. Material You Dynamic Themes(Android 12+)은 기기 배경화면에서 자동으로 다크 팔레트를 생성하는 구현입니다. 사용자가 다크 테마를 강제로 활성화하면 Material You는 고정된 어두운 색상을 사용하는 대신 개인화된 팔레트로 색상을 조정합니다.
설정 → 디스플레이 및 밝기 → 모양에서 '어둡게'를 선택합니다. 프로그래밍 방식으로는 AppDelegate에서 window.overrideUserInterfaceStyle = .dark를 설정합니다. 일정(일몰/일출 또는 사용자 지정 시간)에 따른 자동 전환도 가능하여 하루 동안 테마 간 부드러운 전환이 가능합니다.
forceDarkMode(Android 10+)는 기본 지원이 없는 애플리케이션에서 다크 테마를 강제로 활성화하는 시스템 옵션입니다. Android가 화면 색상을 자동으로 반전시킵니다. 고품질 다크 테마를 위해 개발자는 values-night를 통해 자체 팔레트를 구현하고 forceDarkAllowed를 비활성화해야 합니다.
시스템 다크 모드는 iOS 13(2019년 9월)과 Android 10(2019년 9월)에 등장했습니다. 그 이전에는 개발자가 자체적으로 다크 테마를 구현했습니다. 2026년 기준으로 App Store 및 Google Play의 상위 애플리케이션 중 80% 이상이 다크 모드를 지원하며, Apple과 Google은 이를 필수 옵션으로 권장합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.