← 글 목록

notes

IOS - Swift 참조 한정자(Reference Qualifier)

Swift 참조 한정자의 의미·참조 방식과 메모리 관리 관련 개념 정리.

weak / unowned / strong — ARC에서 누가 소유하는지를 표시하는 한정자.

실무 감각: delegate·자식→부모는 거의 weak. unowned는 “상대가 나보다 무조건 오래 산다”가 확실할 때만 (아니면 크래시).

  • strong: 기본값, 별도 표기 안 해도 됨
  • weak: 항상 Optional, 해제되면 nil
  • unowned: Non-Optional, 해제된 객체 접근 시 런타임 에러

1. strong (기본값)

  • 강한 참조
  • 객체의 소유권을 가짐(참조 카운트 증가)
  • 별도 명시하지 않으면 모든 참조는 strong
  • 객체가 해제되지 않음(순환 참조 주의)
var object: SomeClass? // strong이 기본

2. weak

  • 약한 참조
  • 객체의 소유권을 가지지 않음(참조 카운트 증가 X)
  • 참조 대상이 해제되면 자동으로 nil이 됨 (항상 Optional)
  • 주로 delegate 패턴, 순환 참조 방지에 사용
weak var delegate: SomeDelegate?

3. unowned

  • 비소유 참조
  • 객체의 소유권을 가지지 않음(참조 카운트 증가 X)
  • 참조 대상이 해제되면 접근 시 크래시 발생 (Optional 아님)
  • 참조 대상이 자신보다 오래 살아있을 때 사용
unowned var owner: OwnerClass

4. 요약 표


참고:

  • strong: 기본값, 별도 표기 안 해도 됨
  • weak: 항상 Optional
  • unowned: Non-Optional, 해제된 객체 접근 시 런타임 에러

delegate 붙일 때 weak 빼먹으면 순환 참조로 화면이 안 죽는 경험을 한 뒤에야 표가 머릿속에 남았다.