본문 바로가기
TIL

250511 TIL | 메모리 누수, Firebase Firestore, SPM, TableViewCell 등등

by 23g 2025. 5. 11.

안녕하세요?

 

오늘은 많은 내용들에 대해 공부했어요

그리고 그걸 정리해봤답니다

그럼 레츠 고

async/await

  • Swift 5.5부터 등장한 비동기 문법
  • Swift 6부터 완전히 안정화됨
  • 기존 콜백 기반 코드를 가독성 좋게 개선 가능

ARC & Memory Leak

  • 메모리 누수(memory leak)는 강한 참조 사이클로 발생
    • 주로 클로저에서 [strong self] 사용 시
    • 해결: weak self → 캡처된 객체가 옵셔널됨
  • 레거시 코드에서 unowned → weak으로 변경 권장
  • Xcode의 Memory Graph, 외부 메모리 누수 탐지 라이브러리(memory leak detector)로 추적 가능
  • ARC(Automatic Reference Counting)는 과제 전형 평가 항목에 포함되기도 함

코드 스타일 / 가독성

  • guard let / if let으로 유효성 검사
  • guard 구문 뒤에는 1줄 개행 → 문맥 분리, 가독성 향상
  • if문이 복잡하면 삼항 연산자 사용 고려
  • isHidden 등 뷰 속성은 명확하게 제어

실험 및 기능 롤아웃

  • Amplitude, Firebase로 사용자 이벤트 추적 및 실험 가능
  • 실험용 코드는 운영 시점에 삭제하거나 주석 처리 필요
  • Rollout(점진적 적용), Rollback(되돌리기) 개념 숙지

패키지 관리

  • 요즘은 SPM(Swift Package Manager) 많이 씀
    • 빠르고 오류 적음
  • CocoaPods는 레거시, 잘 안 씀

버전 관리

버전 번호는 x.y.z 형식으로 표현

  • x: 큰 변화 (브레이킹 체인지)
  • y: 기능 추가/정기 릴리즈
  • z: 버그 수정/핫픽스

 UITableView & Cell 재사용

  • indexPath는 [섹션, row] 형태
  • TableView 상위에 ScrollView 겹치면 스크롤 이슈 생길 수 있음
  • 셀을 매번 새로 만들지 않고 재사용(reuse)함
  • → 셀 상태 초기화 중요 (prepareForReuse 활용)
  • .isHidden 같은 속성은 셀 재사용 시 상태 초기화 필요

Firestore 관련

  • getDocuments 대신 addSnapshotListener로 실시간 반영
  • 데이터 초기화 (self.messages = []) 이유 생각하기 → 새로운 데이터 수신 시 초기화 필요
  • order(by:)로 정렬
  • Date()는 기본적으로 영국 시간 기준
  • → 한국 시간 맞추려면 TimeZone 조정 필요

키보드 대응

  • 직접 노티 받아서 구현 가능
  • 또는 IQKeyboardManager 같은 라이브러리 활용
  • 키보드 올라올 때 뷰 밀리거나 입력창 가려지지 않게 처리

기타

  • NotificationCenter: 앱 내부 이벤트 처리에 유용, 한 번 정리해볼 것
  • getDocuments → addSnapshotListener로 변경 시점 판단 필요

 

일요일아 가지마

주 5일제 믿을 수 없어