카테고리 없음

swift 오버라이드 , 슈퍼 공부해보자

kingarthur 2024. 7. 15. 18:53

프로젝트를 처음 만들어봤을때 

가장먼저 맞이해주는 override 많이들 보셨죠 ?

 

가장 처음 반겨줬던 override

아무 생각없이 넘어갔는데 

오늘은 override에 대해 한번 파봅시다!!

 

 


오버라이드 (override)

 

일단 공식문서의 내용을 요약해서 먼저 한번 볼까요

 

상위클래스로부터 상속받은 메서드, 프로퍼티들을 하위 클래스에서 재정의하는 것

 

살짝 알듯 말듯 하네요. 

말보단 코드로 먼저 보시죠 !!

 

 

 

눈으로 보는것 보다 Playground에 따라 쳐보시면 이해가 더 잘갑니다

먼저 Student라는 class를 만들어볼게요.

class Student {
    func sayHello() {
        print("안녕 나는 학생이야")
    }
}

 

호출을 하면 어떻게 나오는지 볼까요 ?

let student = Student()
student.sayHello()

 

응 그래 학생아

 

여기에 Student 클래스를 상속 받아서 Conan 이 인사하는 하위클래스를 만들어볼게요 .

 

class Conan: Student {
    func sayHello() {
        print("내이름은 코난 탐정이져")
    }
}

 

어떻게 뜨셨나요 ?

아래와 같은 화면이 뜨셔야 정상입니다!! 

 

에러!

 

맨처음 언급했던 공식문서 내용을 다시 보면,

상속받은 메서드 프로퍼티를 재정의 하기위해서는 override가 필요합니다. 

 

즉 이렇게 해주면 된다는거죠 ⬇

 

class Conan: Student {
    override func sayHello() {   // <-- override 추가!!
        print("내이름은 코난 탐정이져")
    }
}

let conan = Conan()
conan.sayHello()

// 내이름은 코난 탐정이져

 


 

추가로 

도입부에서도 언급했지만

override 하면 프로젝트 생성할때 

 

override func viewDidLoad() {
  super.viewDidLoad()
}

이거 많이 보셨죠 ?

여기서 super에 대해서도 알아볼건데요! 

 

일단 개념은 아래와 같아요!

 

super.메서드()  // <-- super는 상위클래스를 뜻합니다!!

 

위에 Conan을 예시로 들었던걸 다시 응용해볼게요.

 

class Conan: Student {
    override func sayHello() {
        super.sayHello()
        print("내이름은 코난 탐정이져")
    }
}
let conan = Conan()
conan.sayHello()

이렇게 하면 어떻게 찍힐까요 ?? 

 

오오.. super 

즉,

슈퍼클래스 (Student)의 메서드를 그대로 쓰겠다는 뜻이겠네요 !!

 


오늘 뷰콘트롤러 생명주기를 공부하면서 다시 한번 

공부를 하게 되었다. 

왜 사용하는지 어떻게 사용하는지 

어째든 재정의도하고 뷰를 써야되기 때문에 슈퍼 뷰 디드로드를 해준다고 이해했다. 

부모 뷰디드로드를 상속안하면 버그 현상이 나올수도 있다능 

아무튼 왜 쓰는지랑 어떻게 쓰는지 이해하고 쓰자

아자자


이해하는데 도움이 됐어요.

 

1.  https://zeddios.tistory.com/386

2. https://babbab2.tistory.com/126