돌아오신 것을 환영합니다
이번 영상에서는 우리가 상속 받는 클래스에서 정의된 함수를 어떻게 오버라이딩 하는지
알아보겠습니다
Secondary는 BaseClass를 상속 받고 있습니다
BaseClass에 다른 함수가 있다고 가정하겠습니다
BaseClass 가문의 모든 자손은 역할을 가져야 합니다
그러니 모두가 역할을 가져야 하기 때문에
role이라는 함수를 만드는데
println("Member of the House of BaseClass")라고만 하겠습니다
이 것이 role(역할)입니다
그리고 role은 Secondary와 Tertiary에서 각각 달라야 합니다
그리고 이 Secondary클래스는
파생 클래스 입니다
r이 하나 더 많습니다, BaseClass의
파생 클래스이며 BaseClass로부터 상속 받았다고 할 수 있습니다
이제 이 role함수가 생겼는데
상속 받는 클래스에서 이 함수가 오버라이딩이 가능하도록 하려 합니다
그러므로 이 함수를 열겠습니다
이제 role은 열린 함수가 되어 override 키워드를 사용해 오버라이딩할 수 있습니다
role함수를 오버라이딩 하는데
보시는 것처럼 바로 추천을 받습니다
이제 무슨 일을 할 지를 정할 수 있는데
이 super 키워드가 있습니다
super 키워드는 기본적으로 BaseClass에서 정의한 내용을 실행하라는
의미입니다
실제로 그렇게 되는지 보여드리겠습니다
이제 여기에 추가 사항을 입력하는데
Secondary는 BaseClass 가문의 기사라고 하겠습니다
Start.kt로 가서 이 BassClass객체와 함수를 지우고
obj2만 이용하고 role 함수를 실행해 보겠습니다
좋습니다
다시 실행해서 어떻게 되는지 보겠습니다
보시면 Member of the House of BaseClass가 출력되고 Knight of the House of BaseClass가 출력됩니다
즉 Secondary클래스의 role함수에서 Member of the House of BaseClass라는
println문을 명시하지 않았음에도
이 줄에 의해서 명시됩니다 왜냐하면 이 것이 BaseClass의 role함수의
코드이고 지금 오버라이딩하고 있기 때문입니다
이 함수는 열려있습니다
이는 상속 받는 클래스에서 오버라이딩할 수 있도록 허용하며
Secondary클래스는 상속 받는 클래스이므로 role함수를 오버라이딩할 수 있게 허용됩니다
BaseClass의 role함수에서 실행되는 것이 무엇이든 우리가 실행하고 싶다면
즉 이 중괄호 안의 코드가 무엇이든 super.role()을 호출할 수 있는데 이는
부모의
role함수를 호출하는 것입니다
이 경우 부모 클래스는 BaseClass입니다
이제 이 줄을 지우겠습니다
실행할 필요가 없습니다
사용하지 않을 수도 있습니다
BaseClass 가문의 기사로서의 역할만 가질 것이라고 할 수 있습니다
기본적으로 BaseClass를 상속 받으면 BaseClass 가문의 일원이라는 역할을
받을 것인데
만약에
성장해서 기사가 되는 것과 같이 특별한 역할을 얻고 싶다면
함수를 오버라이딩해야 합니다
이제 다른 클래스를 만들어 보겠습니다
Kotlin 클래스/파일이고 Tertiary입니다
Tertiary 또한 BaseClass를 상속 받을 것입니다
여기에 소괄호를 추가해야 하고
Start.kt로 돌아가서
val obj1을 만듭니다
Tertiary(세 번째)이므로 obj3라고 하겠습니다 발음이 맞는지는
모르겠지만
문맥에서 제가 무슨 말을 하는 지 이해하실 수 있을 것입니다
Secondary와 Tertiary의 role함수를 실행해 보겠습니다
다시 실행해보면
Secondary인 obj2의 Night of the House of BaseClass와 Member of the House of
BaseClass가 출력됩니다
이는 obj3가 됩니다 왜냐하면 Tertiary에서는 BaseClass의 role을 구현하거나 오버라이딩 하지
않았기 때문입니다
오버라이딩을 해야만 이 함수가 호출 되었을 때 무엇이 표시될 지를
수정할 수 있습니다
그러므로 특별한 역할이 없다면, 아직 BaseClass 가문의 아이라고
한다면
예를 들어 가문의 기사나 궁수 또는 음유시인 같은 역할을 얻어야만
그래야만 BaseClass가문에서의 위치와 역할을 바꿀 수
있습니다
println문에 Bard of the House of BaseClass라고 하겠습니다
좋습니다
이제 BaseClass 가문의 일원도 있고
BaseClass 가문의 기사와 BaseClass 가문의 음유 시인도 있습니다
이제 다시 실행해보면 Tertiary 객체는 BaseClass 가문의 일원 대신에 음유 시인이 될 것입니다
그러므로
role함수를 호출했는데 오버라이딩한 함수라면 오버라이딩된 버전이 실행됩니다
함수를 구현하지 않았다면
override 키워드와 함께 이 함수가 클래스 안에 존재하지 않는다면 BaseClass의
role함수가 실행됩니다
이 것이 기본적인
좋습니다
이 것이 상속의 핵심 개념 중 일부입니다