본문 바로가기
TIL

250615 TIL | 사이판에서 돌아왔아요

by 23g 2025. 6. 15.

ㅇ안녕하세요 저입니다.

 

요즘 공부를 왤케 안했냐면요

 

싸이판 갔다왔서요!!!

 

안물어봤다고요?

 

넵 ㅠㅠ

 

그럼 오늘 공부한 내용 스타트~

 

iOS 앱 구조와 UI 기초 개념 정리

SceneDelegate vs AppDelegate

  • AppDelegateapplication(_:didFinishLaunchingWithOptions:) 등을 통해 앱 초기 설정 가능
    → 다른 사람이 만든 프로젝트를 처음 볼 때 AppDelegate부터 보면 흐름 파악에 도움 됨
    (저도 얼릉 입사해서 앱델리게이트로 코드 파악하고시버요 ^_^)
  • 앱 전체 생명 주기를 다룸. 앱이 실행될 때 가장 먼저 실행되는 객체

  • SceneDelegate앱의 각 UI 씬(Scene) 단위 생명 주기를 관리함
    → 필요한 기능이 있다면 공식 문서/검색 통해 그때그때 찾아서 구현해도 충분함
    ex) sceneWillEnterForeground, sceneDidEnterBackground 등 콜백을 통해 상태 감지 가능

  • 버전 체크 문법
  • iOS 13부터 도입됨. 멀티 윈도우, 멀티 씬을 다루기 위한 객체
if #available(iOS 13.0, *) { // iOS 13 이상에서만 실행 }

UI 관련 팁

  • 완전한 원(circle) 만들기
    view.layer.cornerRadius = view.frame.height / 2
    view.clipsToBounds = true
  • cornerRadius = height / 2 로 설정하면 정사각형 뷰는 완전한 이 됨
  • Xib = Nib
    :
    같은 의미임. 커스텀 셀이나 뷰를 정의할 때 자주 사용
  • awakeFromNib() 안에서 초기 설정해주는 경우 많음
  • 코드 템플릿 관리
  • 자주 사용하는 코드나 스타일은 Notion, Pages 등에서 템플릿으로 정리해두면 실무 시 편리함

메모리와 타입

  • 클래스 vs 구조체
    • 클래스: 참조 타입, 힙에 저장됨 → 메모리 누수 발생 가능
    • → 클로저 안에서는 weak self 필수
    • 구조체: 값 타입, 스택에 저장됨 → 안전함 (ARC의 영향을 받지 않음)
  • 메모리 누수 주의
    • 강한 순환 참조(strong reference cycle)가 생기지 않도록 weak 또는 unowned 사용
      근디 거의 weak 사용
    • 클로저 안에서 self를 캡처할 경우 → [weak self] 또는 [unowned self] 사용

화면 전환 방식

  • Push 방식
    : navigationController?.pushViewController(vc, animated: true)
  • Navigation Stack에 쌓임 → Back 버튼 자동 생성
  • Present 방식
    : present(vc, animated: true)
  • Stack에 쌓이지 않음, 모달 방식 → dismiss로 되돌아감

→ present 위에 다시 push는 불가함


동기(Sync) vs 비동기(Async)

나 이거 왜 맨날 헷갈리니

  • 동기: 순차적으로 코드 실행, 작업이 끝나야 다음으로 넘어감
  • 비동기: 작업 요청 후 바로 다음 코드 실행, 콜백이나 클로저로 완료 알림 받음
    → 네트워크 통신은 기본적으로 비동기
DispatchQueue.global().async {
    // 백그라운드 작업

    DispatchQueue.main.async {
        // UI 업데이트
    }
}


뷰 설정 관련

  • contentMode: 이미지 등의 레이아웃 방식
    → 거의 aspectFill을 주로 사용함 (비율 유지 + 꽉 채우기)

객체지향 기초

  • 객체란?
    → Swift에서의 클래스/구조체가 대표적인 예
  • 상태(state, property) + 동작(behavior, method)