# swift의 initializer에 대하여
- - class에서 조금 더 간편하게 initializer 작성하는 방법
- - struct / class의 initializer의 차이
오늘은 너무 기본이지만,
자세히 알고 있지 않았던 swift의 initializer에 대해 다뤄보겠습니다
swift에서 struct (구조체)의 경우에는 initializer를 따로 작성하지 않아도
자동으로 memberwise initializer를 제공해줍니다.
struct Ohtt {
let name: String
let age: Int
}
// initializer를 작성해주지 않아도
// memberwise initializer를 제공해준다
Ohtt(name: "오뜨", age: 26)
하지만 class에서 initializer가 없잖아 !!! 하면서 오류를 냅니다 ...
이렇게 프로퍼티가 적으면 상관없지만 (아니 사실 그래도 귀찮다)
initializer를 작성하는 건 생각보다 귀찮은 일입니다.
게으른 저는 ' 왜 struct처럼 기본 initializer를 제공을 안 해주지? 이거 일일이 쳐야 하나? '
생각하고 구글링을 해보았습니다... 역시나 ... 좋은 기능이 있더라구요
⠀ ⠀
이렇게 class 우클릭 - refactor - generate memberwise initializer를 눌러주면 ~
이렇게 memberwise initializer를 생성해준답니다!!!!! xcode 최고야 ~
그러면서 생긴 궁금증 ... !!!
아니 ~ 그럼 struct처럼 애초에 memberwise initialzier는 기본적으로 세팅해주면 안 되나 ~?
이런 또 게으른 생각이 들다가 ... 안 만들어주는 데는 이유가 있겠지 ! 하고 찾아보았습니다.
여러분이 아시는 class와 struct의 차이 ! 무엇이 있으신가요 ?
가장 큰 차이 중에 하나가 상속입니다
class는 상속이 가능하기 때문에 상속을 받는 class의 경우에는 super class에 대한 고려도 해주어야 합니다
예시를 함께 보시죠 ~
제가 Happy라는 class를 생성해주고 위에 작성했던 OhttClass를 상속받았습니다.
이 Class도 initializer가 필요하니 위의 방법으로 memberwise initializer를 만들어주겠습니다.
그럼 이렇게 만들어주지만 또 오류를 뿜어냅니다
이렇게 상속받은 super Class에 대해서 super.init을 해주어야 오류가 사라집니다.
이렇게 궁금증을 해결했습니다 ~
그런데 또 다른 궁금증이 생겼습니다
기본으로 만들어주는 memberwise initializer는 왜 internal을 접근제어자로 지정했을까요 ?
이 궁금증을 해결하기 위해
다음에는 접근제어에 대해서 더 알아보겠습니다
'iOS > swift' 카테고리의 다른 글
[swift] @discardableResult 키워드 (0) | 2022.04.16 |
---|---|
[swift] Collection - indices (0) | 2022.04.12 |
[Swift] if let 과 guard let (0) | 2022.02.20 |