inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

iOS12 앱 개발 퍼펙트 가이드

6_3_Meal_Rating_View

반드시 required init을 생성해야하는 이유가 뭔가요??

952

in_smart

작성한 질문수 2

0

ios를 배우면서 

required init을 왜 사용하는지 잘 모르겠습니다 

required init에 대해  알려주시면 감사하겠습니다

ios swift

답변 1

2

iOS Developer - 이정

안녕하세요

우선 required init은 이름에서 예상되듯이  반드시 구현해야하는 init이라고 보시면 됩니다.

거기에 몇가지 조건이 있어서 좀 까다로워 보이는데 아래 예시를 보시면 이해가 되실겁니다.

예를 들어 아래와 같이 classA를 만들고 init이 3개 있다고 합시다.

(여러개의 init이 있다고 생각하면 됩니다.)

 

class classA {

    

    required init() {

        print("I'm A")

    }

    

    init(str: String){

        print("string print", str)

    }

    init(num: Int){

        print("num print", num)

    }

 

}

여기서 classB가 classA를 상속받아 봅시다.

그런데 여기서 classB에 init str을 다시 구현한다고 생각합시다. 아래처럼요.

class classB: classA {

  

    override init(str: String) {

        print(str)

    }

    

}

그럼 required를 구현하라고 에러가 나옵니다.

에러를 없애기 위해 required init을 구현했더니

super.init을 구현하라고 에러도 나옵니다.

 

즉 classA을 상속받아 init을 구현하고 싶으면  

required init을 구현과 super의 init 호출이 강제사항으로 바뀝니다.

(부모클래스가 required init만 있으면 super.init은 필요없습니다.)

그래서 아래와 같은 형태로 만들어야 정상적으로 classB를 사용할 수 있습니다.

class classB: classA {

  

    override init(str: String) {

        super.init(str: str)

    }

    

    required init() {

        super.init()

        print("classB init")

    }

    

}

 

만약 required init만 구현하고 싶으면 다른 init은 구현하지 않고 아래처럼 required init만 구현해도 됩니다.

반대로는 required빼고 다른 init만 구현해서는 절대 안된다는 뜻이기도 합니다.

class classB: classA {

    required init() {

        super.init()

        print("classB init")

    }

    

}

 

정리하자면

UIButton같은것들이 보통 그런데 이런것들을 상속받아 사용할거면

required init은 반드시 구현해서 접근할 수 있게 해놔야 정상적으로 프로그램이 작동되도록 설계되어 있다고 이해하시면 됩니다.

참고로 일반적으로 개발자가 required init자체를 직접 만들어서 구현해야 하는 경우는 매우 드문 경우 이므로 체감이 잘 안될수 있습니다.

강의 정리 및 개인 공부

0

278

1

DispatchQueue 질문입니다.

0

575

1

log in 강의 질문드립니다.

0

304

1

meal cell 클릭시 화면 이동 문제

0

379

1

meal cell 클릭시 화면이동 불가

0

347

2

import CreateMLUI 이 안됩니다.

0

241

1

Stop Watch 질문

0

350

2

SignIn ViewController와 SignUp ViewController가 꽉 차지 않는 이유가 궁금합니다.

0

261

1

createMLUI가 import되지 않습니다

0

460

1

plist에 nsallowsarbitraryloads 추가시에도 http통신이 안됩니다

0

903

1

질문드립니다~

0

355

1

질문드립니다.

0

278

2

view와 Viewcontroller의 관계에 대해서 질문 드립니다.

0

222

1

stopwatch 강의 중 시간단위 변경에 대해 질문드립니다.

0

376

2

VNCoreMLRequest 실행 안됨

0

376

2

autolayout attr

0

207

0

Sign in 할때 발생하는 에러가 왜 나타나는지 모르겠습니다.

0

344

1

강의 관련 소스 코드 공유 부탁 드립니다.

0

363

2

별표시부분에 색깔이 칠해는거 없애려면 어떻게 하면 될까요?

0

252

1

3:20~ 3: 30 초에 rating 값을 0 으로 만들어 준다고했는데 왜 0으로 만들어주는 코드가 없죠?

0

254

1

질문입니다.

1

254

3

강사님 안녕하세요

0

158

1

MealDetailViewController에서 이미지 가져오지 못하는 문제

0

213

1

?? 설명하실 때요.

0

238

1