inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Swift 언어로 배우는 iOS 벽돌깨기 게임

class 문법 질문입니다

143

(알 수 없음)

작성한 질문수 23

0

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를 이용한 호출은 또 재정의 되기 전 내용이 출력됩니다. 호출 기준이 너무 헷갈리는데 이 부분에 대해서 알려주시면 감사하겠습니다!

ios swift

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대한 답변은 다음과 같습니다.

Swift에서 클래스의 메서드를 오버라이딩(재정의)하면, 부모 클래스에서 정의된 메서드 대신 오버라이드된 메서드가 호출됩니다. 이는 다형성의 한 예로, 서브클래스에서 오버라이드된 메서드가 부모 클래스의 메서드를 대체하기 때문입니다. 따라서, 부모 클래스의 init에서 simpleFunction 메서드를 호출해도, 실제로 실행되는 것은 Test1 클래스에서 오버라이드된 simpleFunction입니다.

super 키워드를 사용하면, 부모 클래스의 메서드를 명시적으로 호출할 수 있습니다. 예를 들어, Test1 클래스에서 super.simpleFunction()을 호출하면 Test 클래스에 구현된 원본 simpleFunction 메서드가 실행됩니다. super는 서브클래스에서 부모 클래스의 속성이나 메서드에 접근할 때 사용합니다.

요약하자면, 서브클래스에서 오버라이드된 메서드는 부모 클래스에서 호출해도 오버라이드된 버전이 실행되며, super를 사용한 호출은 오버라이드 이전의 부모 클래스의 메서드를 호출합니다. 이로 인해 다형성을 구현하고 클래스의 상속 관계에서 유연성을 확보할 수 있습니다.

수강 기간 연장 문의

0

28

1

수강연장부탁드려도될까요..

0

42

2

Combine Playground 에서 실행 시

0

58

2

70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문

0

42

1

searchable이 화면 하단에 위치해요

0

62

2

Drawing Cycle 관련 질문

0

72

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

95

2

델리게이트 패턴 관련 질문

0

66

2

ios 애드몹 광고

0

134

2

수강 기간 연장 부탁드릴 수 있을까요?

0

61

1

활용 앱 57강 질문입니다.

0

55

1

그래프 그리기 위한 API가 프리미엄 요금제를 구독해야만 가능하다고 합니다...ㅜㅜ

0

76

2

과거 ai없을때 듣고 다시 듣는 중인데

1

55

1

활용 앱 30강 에러 질문입니다

0

64

2

예제 빌드시 The compiler is unable to type-check this expression in reasonable time 에러 발생

0

54

1

TextField 에 Binding 으로 연결하면 에러 발생

0

55

1

xcode 26.2 에서 ReducerOf<Self> 이슈

0

77

2

20강 Task 내부에서 nonisolated async 호출 예제 질문드립니다

0

78

2

19강 Actor 의 동작 관련해 질문드립니다

0

83

2

기초앱 17강 Contraints 설정 질문입니다.

0

67

2

전체 파악 가능한 소스코드 요청합니다.

0

201

1

restart 함수

0

362

1

GameViewController에서 오류가 발생 합니다.

2

404

3

GameScene에 GADRewardedAdDelegate 넣을 때

1

376

5