안녕하세요 오늘은
지정 생성자/편의 생성자에 이어서
필수 생성자와 실패가능 생성자
소멸자에 대해서 알아보고자 합니다
필수 생성자
|
Required Initialization
클래스 생성자 앞에 required 키워드를 사용하게 되면
하위 생성자는 반드시 해당 필수 생성자를 구현해야합니다
만약 하위 클래스에서 필수 생성자를 구현할 때
상위 필수 생성자를 구현하더라도
override 키워드가 아닌 required 키워드만 붙이면 됩니다
또 다른예시를 보고자합니다
Vehicle 클래스 생성자는 reuiqred 키워드를 사용했기 때문에
서브클래스(자식클래스)에서 required 생성자를 반드시 구현해야합니다
그래서 자식클래스에서 반드시 required를 사용하여 구현하는것을 볼 수 있습니다
실패가능 생성자
|
실패가능 생성자는 인스턴스 생성에 실패할 수도 있는 가능성을 가진 생성자
(클래스, 구조체, 열거형 모두 가능)
정의하는 방법은
생성자에?를 붙여서 init?라고 정의하면 실패가능 생성자 입니다
클래스에서 상속에서 재정의도 가능하답니다 :)
옵셔널이 붙었다고 생각하시면 편할것 같네요
구조체도 생성자를 만들 수 있기 때문에
생성자를 만든 Init키워드 뒤에 ?를 붙이면 된다
열거형도 동일하게 init?로 생성자를 만들어준다
만약 조건에 일치하는 케이스가 없는 경우 nil로 반환하는걸 볼 수 있다
상속관계에서 실패 가능 생성자와 기본 생성자 호출 및 위임에 대해서 보여주고 있습니다
생성자 호출 예제는 다양한 조건에서 성공과 실패할 수 있답니다
(상위) 실패가능 init? init! |
(하위) 실패불가능 재정의(가능) - 강제 언래핑 활용 가능 init! init? |
(상위)실패불가능 | (하위) 실패가능 재정의 (불가능) ❌❌❌❌❌ |
소멸자
|
인스턴스가 메모리에서 해제되기 직전 정리가 필요한 내용을 구현하는 메서드입니다
클래스 정의시 클래스에서는 최대 1개의 소멸자를 정의가 가능하답니다
소멸자는 파라미터(매개변수)는 사용하지 않습니다
swift에서는 소멸자를 자동참조계산(ARC)형식을 통해 메모리를 관리하기 때문에
수동으로 관리를 할 필요가 없습니다
하지만 특별한 작업을 수행하는 경우
몇가지 추가 정리를 직접 수행해야하는 경우가 있을 수 있습니다
그리고 소멸자는 클래스에서만 존재하고 있습니다
생성자는 필요한 만큼 구현할 수 있지만
소멸자는 하나만 구현이 가능합니다
소멸자는 직접호출할 수 없고
인스턴스가 메모리에서 제거되기 직전에 자동으로 호출이 됩니다
📕예)
✏️ 인스턴스에서 파일을 열고 일부 데이터를 사용하는 경우,
클래스 인스턴스가 할당 해제되기 전에 파일을 닫아야 파일에 손상이 가지 않음
소멸자에서는 인스턴스의 모든 속성에 엑세스 할 수 있으며
해당 속성을 기반으로 동작을 수정할 수 있음
(예: 닫아야하는 파일의 이름 조회)
이렇게 간단하게 필수 생성자와 실패가능 생성자
소멸자에 대해서 알아보았습니다
❤️혹시 잘못된 정보가 있다면 꼭 댓글로 알려주시면 감사하겠습니다❤️
✏️참고
Swift 공식문서
'Swift' 카테고리의 다른 글
Swift | 타입캐스팅(Type Casting)에 관하여 - is / as (0) | 2024.05.19 |
---|---|
Swift | 서브스크립트(Subscripts)에 관하여 (0) | 2024.05.17 |
공식문서 Swift | class(클래스)와 struct(구조체)에 관하여 - 초기화와 생성자 3 (✏️편의생성자/지정생성자) (0) | 2024.05.17 |
공식문서 Swift | class(클래스)와 struct(구조체)에 관하여 - 초기화와 생성자 2 (✏️편의생성자) (0) | 2024.05.17 |
Swift | class(클래스)와 struct(구조체)에 관하여 - 초기화와 생성자 (0) | 2024.05.16 |