inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

16강. 코틀린에서 다양한 함수를 다루는 방법

확장 함수의 오버라이드에 대해서 궁금한 점이 있습니다.

314

an622911

작성한 질문수 1

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

예로 들어주신 Train, Srt 클래스에 존재하는 isExpensive() 확장 함수에 대해서 의문이 생겼습니다.

코틀린의 경우 오버라이드의 경우 override 키워드를 사용해서 정의를 한다고 강의에서 배웠는데요, Srt의 isExpensive() 함수를 함수 오버라이딩이라고 볼 수 있는지 궁금합니다.

궁금해서 찾아본 결과 오버라이딩의 경우 상속 관계가 핵심이고, 상위 클래스의 함수를 하위 클래스가 재정의 하는 것이라고 표현할 수 있을 것 같습니다.

Train과 Srt의 확장 함수는 각 클래스에 정의가 되어 있긴 하지만, 내부에서도 상속 관계가 되어 오버라이딩에 대한 바인딩이 처리되어 있을까? 하는 의문이 들었습니다.

확장 함수의 오버라이딩이 어떻게 진행되는지 궁금합니다..!

java kotlin 객체지향

답변 1

0

최태현

안녕하세요! an622911님! 🙂 좋은 질문 감사드립니다.

Train과 Srt의 확장 함수는 각 클래스에 정의가 되어 있긴 하지만, 내부에서도 상속 관계가 되어 오버라이딩에 대한 바인딩이 처리되어 있을까? 하는 의문이 들었습니다.

확장 함수의 오버라이딩이 어떻게 진행되는지 궁금합니다..!

 

결론부터 말씀드리면, 확장함수는 확장하려는 클래스에 존재하는 함수를 선언하건, 존재하지 않는 함수를 선언하건, static method로 처리됩니다! 예를 들어,

fun Parent.hello() {
    print("Hello Parent extension function")
}

와 같이 Parent 클래스에 hello() 확장함수를 만들면, 컴파일 되었을 때

public static final void hello(@NotNull Parent this$hello) {
  String var1 = "Hello Parent extension function";
  System.out.print(var1);
}

와 같은 느낌으로 컴파일 되는거에요!

 

따라서 원래 존재하던 함수와 동일한 시그니처를 갖는 함수를 확장함수로 만들게 되면

엄밀히는 상속관계의 오버라이딩이 아니라, 수신객체를 매개변수로 받는 static 함수가 생기는 것 뿐입니다.

 

강의에서 "오버라이딩"으로 표현드렸던 것은, 마치 상속에서 특정 함수를 재정의할 수 있는 것처럼, 확장 함수도 재정의가 가능하다는 것을 보여드리기 위함으로 봐주시면 될 것 같습니다! 🙏 물론, 확장 함수는 같은 시그니처를 썼을 경우, 원본 함수에 우선권이 있죠!

답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙇

1

an622911

감사합니다.
궁금증이 해소 되었습니다!

수업노트

0

53

1

싱글톤과 스프링

0

71

2

get() = 3

0

51

2

강사님

0

74

1

강의 복습하면서 생긴 질문

1

94

1

Kotlin과 Java의 현업에서의 활용

0

125

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

75

1

코틀린에서 상속 시, 주의점에 대한 질문

1

96

3

내용 이해 질문

0

56

1

자바와 코틀린의 함수형 프로그래밍,

1

91

1

플랫폼 타입 설명 문의

2

76

2

널 아님 단언 관련 질문

0

83

1

강의 중 질문

0

79

2

범위 비교 질문

1

91

2

타입캐스팅 궁금한점 질문드립니다.

1

239

2

코틀린 val 질문

0

166

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

408

2

확장함수 스타일 질문

0

139

2

확장 프로퍼티 질문

1

156

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

283

1

java class의 NotNull 어노테이션 인식

1

264

1

[16강] 확장함수 관련 질문입니다!

1

134

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

142

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

171

1