본문 바로가기
iOS 프로그래밍 실무

iOS 프로그래밍 실무 3주차

by 노아입니다 2025. 3. 20.

Night Light 무드등 앱 기획안 요약

1. 주요 기능

  • 다양한 조명 모드: 나이트 라이트, 무드 라이트, 라바 램프 등 여러 조명 모드를 제공합니다.
  • 음악 및 슬라이드쇼 기능: 음악과 사진 슬라이드쇼를 결합하여 풍부한 사용자 경험을 제공합니다.
  • 사용자 맞춤 설정: 색상과 밝기를 자유롭게 조절할 수 있어 개인화된 조명을 설정할 수 있습니다.

2. 사용자 리뷰 분석

  • 간편한 인터페이스: 사용자들이 직관적이고 사용하기 쉬운 인터페이스를 긍정적으로 평가했습니다.
  • 버그 및 안정성: 일부 앱에서는 자주 충돌하는 문제나 불안정성 이슈가 있었습니다. 이러한 문제는 개발 시 개선해야 할 중요한 부분입니다.

3. 기획서 요약

  • 앱 이름: Night Light Mood Lamp
  • 목표: 사용자 친화적인 인터페이스와 안정성을 제공하는 무드등 앱을 개발
  • 주요 기능: 다양한 조명 모드, 음악 재생, 사용자 맞춤 설정

4. 역할 분담

  • 기획자 (Product Manager): 앱의 비전 설정, 요구사항 분석, 프로젝트 관리
  • 개발자 (Developer): 프론트엔드 및 백엔드 개발, 데이터베이스 설계 및 API 통합
  • 디자이너 (Designer): UI/UX 디자인, 프로토타입 제작, 사용자 피드백 반영

5. 프로젝트 일정 예시

  • 2025년 3월: 프로젝트 킥오프 및 요구사항 정의
  • 2025년 4월: 디자인 프로토타입 제작 및 피드백 수집
  • 2025년 5월: 개발 진행 및 테스트, 최종 수정
  • 2025년 5월 30일: 앱 출시 및 마케팅 시작

6. 화면 구성 및 기능

  • 메인 화면:
    • 색상 선택기
    • 밝기 조절 슬라이더
    • 라이트 켜기/끄기 버튼
  • 설정 화면 (선택 사항): 타이머 기능으로 자동 꺼짐 설정 가능

7. 소스코드 예시

import SwiftUI

struct ContentView: View {
    @State private var selectedColor: Color = .white
    @State private var brightness: Double = 1.0
    @State private var isLightOn: Bool = false

    var body: some View {
        VStack {
            Rectangle()
                .fill(selectedColor)
                .frame(height: 300)
                .opacity(isLightOn ? brightness : 0.0)
                .animation(.easeInOut)

            ColorPicker("Select Color", selection: $selectedColor)
                .padding()

            Slider(value: $brightness, in: 0...1, step: 0.01) {
                Text("Brightness")
            }
            .padding()

            Button(action: {
                isLightOn.toggle()
            }) {
                Text(isLightOn ? "Turn Off" : "Turn On")
                    .font(.title)
                    .padding()
                    .background(isLightOn ? Color.red : Color.green)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
            .padding()
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

8. 추가 기능 (선택 사항)

  • 타이머 기능을 추가하여 일정 시간이 지나면 자동으로 조명이 꺼지도록 설정할 수 있습니다.

이 기획안을 통해 Night Light 무드등 앱사용자 친화적이고 안정적인 경험을 제공할 수 있습니다.

 

iOS 뷰 생명 주기(View Life Cycle)

iOS 앱의 뷰 생명 주기는 뷰 컨트롤러(ViewController)가 화면에 표시되기 전과 후에 여러 가지 메서드가 호출되며, 이 메서드들을 통해 뷰의 상태를 관리할 수 있습니다. 이러한 메서드들이 호출되는 순서와 역할을 이해하는 것이 중요합니다.

 

1. viewDidLoad

  • 설명: 뷰 컨트롤러의 뷰가 메모리에 로드될 때 호출됩니다. 이 시점에서 뷰는 아직 화면에 표시되지 않았습니다.
  • 용도: 뷰에 필요한 초기 설정을 할 때 사용합니다. 예를 들어, UI 요소를 초기화하거나 데이터를 준비할 때 유용합니다.
  • 주의사항: 뷰가 화면에 나타나지 않기 때문에 UI 업데이트와 관련된 작업은 하지 않는 것이 좋습니다.
 

2. viewWillAppear

  • 설명: 뷰 컨트롤러의 뷰가 화면에 표시되기 직전에 호출됩니다. 이 시점에서 뷰는 아직 화면에 나타나지 않았지만, 화면에 나타날 준비가 되어 있습니다.
  • 용도: 뷰가 화면에 표시되기 전에 데이터를 갱신하거나 UI 요소의 상태를 변경하는 데 사용합니다. 예를 들어, 화면 전환 후 이전 화면에서 데이터를 새로고침할 때 사용합니다.
 

3. viewDidAppear

  • 설명: 뷰 컨트롤러의 뷰가 화면에 완전히 표시된 후 호출됩니다. 이 시점에서 뷰는 사용자에게 표시되고 있으며, UI 요소들이 화면에 렌더링됩니다.
  • 용도: 화면에 표시된 후 사용자와 상호작용할 준비가 된 상태이므로, 애니메이션 시작이나 외부 데이터 요청 등을 이 시점에서 처리할 수 있습니다.

iOS 뷰 생명 주기의 흐름

  1. viewDidLoad: 뷰가 메모리에 로드된 후 호출됩니다. 초기 설정 및 데이터 준비를 위한 메서드입니다.
  2. viewWillAppear: 뷰가 화면에 나타나기 직전에 호출됩니다. 데이터를 갱신하거나 UI 요소를 업데이트할 때 사용합니다.
  3. viewDidAppear: 뷰가 화면에 완전히 표시된 후 호출됩니다. 사용자와의 상호작용을 위한 준비가 완료된 상태입니다.
  4. viewWillDisappear: 뷰가 화면에서 사라지기 직전에 호출됩니다. 뷰가 사라지기 전에 필요한 작업을 처리합니다.
  5. viewDidDisappear: 뷰가 화면에서 완전히 사라진 후 호출됩니다. 리소스를 정리하거나 관련 작업을 마무리합니다.

요약

  • viewDidLoad: 뷰 초기화 후 호출. 데이터 설정 및 UI 초기화.
  • viewWillAppear: 뷰가 화면에 나타나기 직전. UI 업데이트나 데이터 갱신.
  • viewDidAppear: 뷰가 화면에 완전히 표시된 후 호출. 사용자 상호작용 준비.
  • viewWillDisappear: 뷰가 화면에서 사라지기 직전. 상태 저장 및 작업 정리.
  • viewDidDisappear: 뷰가 화면에서 완전히 사라진 후 호출. 리소스 해제 및 정리 작업.