공지사항

  • 안녕하세요, 오뜨입니다 !
ohtt
오뜨네
ohtt
  • 분류 전체보기 (36)
    • iOS (17)
      • iOS (8)
      • swift (4)
      • Reactive (1)
      • swiftUI (4)
    • Algorithm (0)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 문제 (0)
    • 기타 (3)
      • Git (1)
      • Design (1)
      • ETC. (1)
    • 끄적끄적 (9)
      • 회고 (2)
      • 일상 (6)
      • 폰으로끄적임 (0)
    • Books (7)
전체 방문자
오늘
어제

태그

  • ios
  • isHidden
  • autorenewal
  • 회고
  • 힙주비
  • swiftUI
  • SWIFT
  • 책
  • iOS16
  • discardableResult

블로그 메뉴

  • 홈
  • 태그
  • 방명록

최근 댓글

hELLO · Designed By 정상우.
ohtt

오뜨네

[Swift] class / struct - initializer  - 조금 더 편하게 작성하는 법
iOS/swift

[Swift] class / struct - initializer - 조금 더 편하게 작성하는 법

2022. 1. 21. 10:47
# 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
    'iOS/swift' 카테고리의 다른 글
    • [swift] @discardableResult 키워드
    • [swift] Collection - indices
    • [Swift] if let 과 guard let
    ohtt
    ohtt
    iOS Developer

    티스토리툴바