class 문법 질문입니다
173
작성한 질문수 24
class Test{
var age = 100
var name = "배트맨"
func simpleFunction(){
print("안녕하세요 저는 \(name)입니다. 저는 \(age)살임")
}
init(){
simpleFunction()
print("부모 클래스 init")
}
}
class Test1: Test{
override func simpleFunction(){
print("자식 클래스")
}
}
let test1 = Test1()
test1.simpleFunction()자식 클래스
부모 클래스 init
자식 클래스
위와 같은 상황입니다 일단 Test1에 init 메서드가 없으니 컴파일러가 자동으로
init(){
super.init()
}을 생성하겠죠 그럼 부모 클래스의 init을 호출할 거고 부모 클래스의 init에는 simpleFunction 메서드 호출 구문이 있으니 호출하겠죠 근데 분명 부모 클래스 내에서 호출했는데 왜 재정의된 simpleFunction 메서드의 내용이 호출됐는지 이해가 되질 않습니다
구글링이랑 gpt 이용해서 알아 보니 재정이된 메서드는 부모 클래스에서 호출하더라도 재정의된 내용이 호출된다는데 이 말대로라면super.simpleFunction를 이용해서 메서드를 호출한다고 하더라도 재정의 됐으니 재정의된 내용이 출력되어야 할텐데 super를 이용한 호출은 또 재정의 되기 전 내용이 출력됩니다. 호출 기준이 너무 헷갈리는데 이 부분에 대해서 알려주시면 감사하겠습니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변은 다음과 같습니다.
Swift에서 클래스의 메서드를 오버라이딩(재정의)하면, 부모 클래스에서 정의된 메서드 대신 오버라이드된 메서드가 호출됩니다. 이는 다형성의 한 예로, 서브클래스에서 오버라이드된 메서드가 부모 클래스의 메서드를 대체하기 때문입니다. 따라서, 부모 클래스의 init에서 simpleFunction 메서드를 호출해도, 실제로 실행되는 것은 Test1 클래스에서 오버라이드된 simpleFunction입니다.
super 키워드를 사용하면, 부모 클래스의 메서드를 명시적으로 호출할 수 있습니다. 예를 들어, Test1 클래스에서 super.simpleFunction()을 호출하면 Test 클래스에 구현된 원본 simpleFunction 메서드가 실행됩니다. super는 서브클래스에서 부모 클래스의 속성이나 메서드에 접근할 때 사용합니다.
요약하자면, 서브클래스에서 오버라이드된 메서드는 부모 클래스에서 호출해도 오버라이드된 버전이 실행되며, super를 사용한 호출은 오버라이드 이전의 부모 클래스의 메서드를 호출합니다. 이로 인해 다형성을 구현하고 클래스의 상속 관계에서 유연성을 확보할 수 있습니다.
진로에 대한 질문...!
0
42
1
Static 선언 시 에러 발생
0
48
1
클로저의 형태로 만들다
0
52
1
Function Types Error
0
44
1
안드로이드 기기 실행 오류
0
68
2
수강연장 가능할까요...
0
61
2
강의에서 사용된 안드로이드 스튜디오 버전을 알고싶어요.
0
64
2
SwiftData 미리보기 미적용
0
58
2
중괄호와 함수
0
60
2
기본 뷰 디자인이 강사님과 다릅니다.
0
58
2
이미지 2x, 3x 질문
0
46
2
강의를 다 듣고난 후
0
78
2
android crud중 c 영상이 12초만 있는 잘린 영상이에요.
0
76
2
수강 기간 연장 문의
0
70
1
수강연장부탁드려도될까요..
0
87
2
Combine Playground 에서 실행 시
0
104
2
70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문
0
83
1
searchable이 화면 하단에 위치해요
0
104
2
Drawing Cycle 관련 질문
0
102
1
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
0
139
2
전체 파악 가능한 소스코드 요청합니다.
0
215
1
restart 함수
0
390
1
GameViewController에서 오류가 발생 합니다.
2
443
3
GameScene에 GADRewardedAdDelegate 넣을 때
1
428
5





