iOS

[iOS] iOS 개발자를 위한 토막 상식 5

Devleoper_yh 2025. 4. 22. 22:41
반응형

1. defer는 리소스 해제에 좋다

정의: defer는 현재 스코프가 종료되기 직전에 실행되는 코드를 정의한다.

활용: 파일 닫기, 락 해제, 알림 전송 등 리소스 정리에 유용

func readFile() {
    let file = openFile()
    defer { closeFile(file) }
    // 파일 작업 수행
}

2.  @MainActor를 써야 할 때

정의: @MainActor는 해당 함수나 클래스가 메인 스레드에서 실행돼야 함을 명시한다.

활용: UI 관련 작업을 DispatchQueue.main.async 없이도 안전하게 실행할 수 있다.

@MainActor
func updateUI() {
    self.label.text = "Updated"
}

 


3. UIApplication.shared의 제한된 사용

설명: 앱 생명주기나 상태 확인엔 유용하지만, 의존도가 높아지면 테스트하기 어려운 코드가 된다.

팁: 주입 가능한 방식으로 캡슐화해서 사용하면 테스트도 용이하고 유지보수에 좋다.


4. assert vs precondition의 차이

  • assert: 디버그 모드에서만 체크. 배포 시 무시됨.
  • precondition: 디버그 & 릴리즈 모두 체크. 조건 실패 시 크래시 유발.
assert(value != nil, "디버깅용 체크")
precondition(value > 0, "실행 중 필수 조건 체크")

 


5. LaunchScreen은 가벼울수록 좋다

이유: LaunchScreen은 앱 실행 인상을 좌우하지만, 복잡하게 만들면 렌더링 비용이 올라 초기 속도에 영향을 줍니다.

팁: Storyboard나 SwiftUI로 가볍게 구성하고, 앱 UI와 유사하게 만들어 사용자에게 부드러운 전환감을 주는 게 중요하다.

 

반응형