Swift

공식문서 Swift | class(클래스)와 struct(구조체)에 관하여 - 초기화와 생성자 2 (✏️편의생성자)

ziziDev 2024. 5. 17. 13:52
반응형

 

 

안녕하세요!

저번에 이어서

생성자에 대해서 좀 더 자세히 알아보고자 합니다

저번시간에 정말 기초적인걸 다뤘으니 궁금하시다면

한 번 읽고 오시는걸 추천드립니다~!

 

 

우선 구조체의 생성자에 대해서 정리하는 시간을 가지려고 합니다

 

구조체의 생성자는 클래스에 비해서 비교적 간단합니다

 

구조체는 init() 생성자내부에 self.init(...)으로 오버로딩된 함수 호출이 가능합니다

 

 

 

이렇게 이미지를 보면 init(매개변수 red, green, blue)함수를  오버로딩한 함수에서 호출하는걸

확인할 수 있습니다

 

 

다음으로 클래스 생성자에 대해서 알아보고자 합니다

 

클래스는 구조체보다 좀 더 다양하게 생성자를 만들 수 있습니다

 

클래스는 

지정생성자와 편의생성자가 있습니다

 

쉬운 예제 하나를 보고 설명하도록 하겠습니다

 

지정생성자는

눈으로 보고 알겠지만

편의생성자는 아직 잘 모르는게 당연합니다

 

편의생성자

편의생성자는 지정 생성자를 보조하기위해 사용함

객체 초기화를 간단하게 하기 위해서 추가적인 초기화 옵션을 제공하는 역할

반드시 init 앞에 'convenience'키워드가 붙습니다

그리고 지정생성자의 갯수를 줄이고 편의 생성자에서 호출하도록 하는것이 바람직합니다

상속했을 때 다른 편의 생성자를 호출하거나 지정생성자를 호출해야합니다

 

 

클래스 상속과 초기화를 통해서 편의생성자

좀 더 알아보고자 합니다

📝 

상위 class 로 부터 상속한 class의 모든 프로퍼티를 포함하는 모든 class에 저장된 프로퍼티는

초기화 중에 반드시 초기값이 할당되어야 합니다

 

초기화를 받을 수 있도록 클래스 타입에는 2가지 초기화 구문을 정의하고 있습니다

 

-지정된 초기화

-편의 초기화 

 

상속관계에서 개발자가 실수 할 수 있는 여러 가능성을 배제 가능하고 초기화 과정에서

간편하게 사용이 가능합니다

 

여기서 3가지 규칙이 있습니다

 

 

그림으로 보듯이

편의 지정자는 같은 클래스 지정 생성자를 향하게 되고

지정생성자는 부모 클래스 지정생성자를 향하는걸 볼 수 있습니다

 

공식문서 이미지에서도 볼 수 있답니다

 

 

 

편의생성자는 2단계 초기화가 있습니다

 

 

 

 

이렇게 단계별로 볼 수 있는데

글로만 보면 잘 모르니

위에서 이야기를 했지만

지정 생성자와 편의 생성자 구문의 동작에 대해서

공식문서를 통해 한 번 더 알아보고자 합니다

 

 

 

 

 

이렇게만 정의를 하면 안됩니다

하위 생성자에서 반드시 슈퍼클래스 생성자를 호출해야하기 때문입니다

그래서 수정해보자면

 

이렇게 수정하면 오류가 나지 않고 정상적으로 작동하는걸 볼 수 있다

 

 

여기서 하위 클래스 하나 더 만들어서

알아보고자 합니다

 

 

 

 

다른 예시 하나를 더 보고자 합니다

 

 

응? 편의생성자는 override 재정의가 안된다고 하는데??

오옹??..

보면

위 Aclass 지정생성자를 Bclass에서 재정의 하는걸 볼 수 있습니다

 

❤️혹시 잘못된 정보가 있다면 꼭 댓글로 알려주시면 감사하겠습니다❤️

 

 

 

✏️참고

앨런스위프트 문법 자료(강의)

Swift 공식문서

반응형