[Swift] 클래스 인스턴스의 소멸

2023. 8. 21. 00:04·Apple/Swift
목차
  1. 클래스 인스턴스의 소멸
  2. Person 클래스 정의
  3. 인스턴스 생성
  4. 인스턴스 해제
728x90
반응형

이번 시간에는 클래스 인스턴스의 소멸과 그 과정에 대해서 알아보도록 하겠습니다.

 

클래스 인스턴스의 소멸

Swift 클래스의 인스턴스를 생성하면 해당 속성 및 관련 데이터를 저장하기 위해 메모리를 차지합니다. Swift는 ARC(Automatic Reference Counting)라는 프로세스를 통해 자동 메모리 관리를 사용하여 메모리 사용량을 효율적으로 관리하고 인스턴스가 더 이상 필요하지 않을 때 자동으로 할당을 해제합니다. 이 프로세스는 메모리 누수를 방지하고 애플리케이션의 메모리 사용량을 관리하는 데 도움이 됩니다.

 

Swift 클래스 인스턴스의 파괴가 작동하는 방식에 대해서 살펴보겠습니다.

  1. 초기화: 클래스의 새 인스턴스를 생성하면 해당 속성 및 기타 관련 데이터를 저장하기 위해 메모리가 할당됩니다. 인스턴스는 초기 참조 횟수가 1인 것으로 간주됩니다.
  2. 참조 카운팅: Swift의 ARC는 인스턴스에 대한 참조 수를 추적합니다. 인스턴스를 새 변수에 할당하거나 함수에 인수로 전달하거나 컬렉션(예: 배열)에 저장할 때마다 참조 횟수가 1씩 증가합니다. 인스턴스에 대한 참조가 범위를 벗어나면 또는 참조를 명시적으로 'nil'로 설정하면 참조 횟수가 1씩 감소합니다.
  3. 제로 참조 카운트: 인스턴스의 참조 카운트가 0에 도달하면 해당 인스턴스를 가리키는 참조가 더 이상 없음을 의미합니다. 이는 인스턴스에 더 이상 액세스할 수 없거나 필요하지 않음을 나타냅니다.
  4. Deinitialization(Deinit): 인스턴스가 메모리에서 할당 해제되기 전에 Swift는 정리 작업을 수행할 기회를 제공합니다. 이것은 다른 프로그래밍 언어의 소멸자와 유사한 클래스의 deinit 메서드에서 수행됩니다. deinit 메서드에서 리소스를 해제하거나 연결을 닫거나 기타 필요한 정리 작업을 수행할 수 있습니다.
  5. 할당 해제: deinit 메서드가 호출되고 모든 정리 작업이 완료되면 인스턴스가 할당 해제되고 점유한 메모리가 시스템에서 재사용할 수 있도록 해제됩니다.

Swift의 ARC는 대부분의 메모리 관리 작업을 자동으로 처리하지만 메모리 누수로 이어질 수 있는 잠재적인 유지 주기 또는 강력한 참조 주기를 인식해야 하는 경우가 있습니다.

 

Swift는 이러한 상황을 해결하고 강력한 참조 순환을 끊기 위해 약한 참조 및 소유되지 않은 참조와 같은 메커니즘을 제공합니다.

 

요약하면, Swift 클래스 인스턴스의 파괴는 그에 대한 참조를 제거하여 참조 횟수를 0으로 줄이고, 정리 작업을 위해 deinit 메서드를 호출하고, 마지막으로 인스턴스가 점유한 메모리를 할당 해제하는 작업을 포함합니다.

 

이 자동 메모리 관리 프로세스는 Swift의 메모리 관리를 단순화하고 개발자가 강력하고 효율적인 코드 작성에 집중할 수 있도록 도와줍니다.

 

보통 deinit 메서드에는 인스턴스가 메모리에서 해제되기 직전에 처리할 코드를 넣어줍니다.

 

위의 코드는 Swift에서 클래스 인스턴스의 생성과 소멸 과정을 보여주는 예제입니다.

class Person {
    var height: Float = 0.0
    var weight: Float = 0.0
    
    deinit {
        print("Person 클래스의 인스턴스가 소멸됩니다.")
    }
}

var Purple: Person? = Person()
Purple = nil

 

Person 클래스 정의

Person 클래스는 height와 weight 라는 두 개의 속성을 가지고 있습니다.
   

이 클래스에는 deinit 메서드가 정의되어 있는데, 이 메서드는 해당 인스턴스가 소멸될 때 호출됩니다. 소멸 시에 "An instance of the Person class will be destroyed."라는 메시지를 출력합니다.

 

인스턴스 생성


Person 클래스의 인스턴스를 생성하고 이를 Purple 변수에 할당합니다.
Purple 변수는 옵셔널 타입으로 선언되었기 때문에, 인스턴스를 참조하고 있다가 나중에 nil로 설정하여 참조를 해제할 수 있습니다.

인스턴스 해제


Purple 변수에 nil을 할당함으로써, 이전에 생성한 Person 클래스의 인스턴스에 대한 참조가 제거됩니다.

 

이로 인해 참조 카운트가 0이 되며, 해당 인스턴스는 더 이상 접근되지 않으므로 메모리에서 해제됩니다.

 

인스턴스가 소멸될 때 deinit 메서드가 호출되며, "An instance of the Person class will be destroyed." 메시지가 출력됩니다.

요약하면, 위의 코드에서는 Person 클래스의 인스턴스를 생성하고 변수를 통해 참조한 후, 변수에 nil을 할당하여 인스턴스를 해제하는 과정을 보여주고 있습니다.

 

이 과정에서 인스턴스의 참조 카운트가 증가하고 감소하며, 인스턴스의 deinit 메서드가 소멸 시점에 호출됨을 확인할 수 있습니다.

 

감사합니다.


틀린 부분이 있거나 더 좋은 내용 훈수 환영합니다!

공감과 댓글 부탁드립니다.

728x90
반응형

'Apple > Swift' 카테고리의 다른 글

[Swift] 데이터 타입, 상수, 변수의 개념과 예시  (0) 2023.09.12
[Swift] for문을 이용한 특정 키워드 반복 출력  (2) 2023.09.05
[Swift] 접근제어  (2) 2023.08.09
[Swift] framework import  (2) 2023.07.26
[Swift] 리터럴, 식별자, 키워드  (0) 2023.07.11
  1. 클래스 인스턴스의 소멸
  2. Person 클래스 정의
  3. 인스턴스 생성
  4. 인스턴스 해제
'Apple/Swift' 카테고리의 다른 글
  • [Swift] 데이터 타입, 상수, 변수의 개념과 예시
  • [Swift] for문을 이용한 특정 키워드 반복 출력
  • [Swift] 접근제어
  • [Swift] framework import
P_Piano
P_Piano
20대의 한 페이지를 꽃갈피 하다.

P_Piano님의
글이 좋았다면 응원을 보내주세요!

응원하기
응원은 창작의 힘

이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.

카카오 계정으로 누구나

응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.

응원 댓글 강조

글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.

쉬운 결제

응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.

응원 수익은 창작자에게 큰 힘이 됩니다.
응원 금액
응원 댓글
  • 창작 활동에 대한 감사와 격려의 의미로 창작자를 응원합니다.
  • '응원하기'는 자발적 결제이므로 청약철회(환불) 불가능합니다.
  • '응원하기'는 만 14세 이상 인증 사용자만 이용할 수 있습니다. 만 19세 미만 미성년 회원의 경우, 법정대리인이 응원하기 결제 이용에 동의하지 않으면 미성년자 본인 또는 법정대리인이 그 결제 내용을 취소할 수 있습니다.
  • '응원하기' 이용을 위한 자세한 내용은 티스토리 이용약관 및 카카오 유료서비스 이용약관을 따릅니다.
(주) 카카오 대표이사 정신아
사업자 등록 번호 120-81-47521
통신판매업신고번호 제2015-제주아라-0032호
주소 제주특별자치도 제주시 첨단로 242(영평동)
호스팅사업자 (주)카카오
고객센터 1577-3754
이메일 help.notice@kakaocorp.com
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Apple (117)
        • iOS (21)
        • visionOS (4)
        • Swift (64)
        • UIKit (2)
        • SwiftUI (20)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    visionOS
    옵셔널
    Optional
    함수
    제어문
    연산자
    티스토리챌린지
    네트워크
    자바스크립트
    swiftUI
    비동기
    코딩테스트
    combine
    변수
    프로퍼티 래퍼
    오블완
    프로세스
    배열
    SWIFT
    Vision Pro
    이니셜라이저
    클래스
    Initializers
    UIKit
    디자인패턴
    Xcode
    메서드
    운영체제
    스위프트
    ios
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] 클래스 인스턴스의 소멸
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.