Intro

Dart를 공부할수록 비교적 최신 언어답게 아주 우아하고, 편리한 언어임을 느끼고 있다.

Dart에 점점 빠져들며 Dart 공식문서를 읽던 중 흥미로운 문구를 발견했다.

Dart doesn't have overloading. -Dart.dev-

다형성을 구현하는 대표적인 방법인 오버로딩을 지원히지 않는다니..

이게 도대체 무슨 말인지 알아보자.

함수, 메서드 용어를 구분하지 않고 혼용하였습니다.

Overloading?

먼저, 오버로딩의 정의는 다음과 같다.

In some programming languages, function overloading or method overloading is the ability to create multiple functions of the same name with different implementations. Calls to an overloaded function will run a specific implementation of that function appropriate to the context of the call, allowing one function call to perform different tasks depending on context. -Wikipedia-

요약하자면, 이름이 동일하지만 시그니처가 다른 메서드를 여러개 선언할 수 있고, 메서드 호출 시, 컴파일러가 적절한 메서드를 알아서 호출해주는 기능이다.

이러한 특성으로 인해, 객체지향 프로그래밍을 지원하는 많은 언어에서 오버로딩을 지원한다.

Dart는 객체지향을 포기해버린걸까?.. Dart의 이야기를 들어보자

Dart가 오버로딩을 포기한 이유?

Dart가 오버로딩에 대해 부정적인 이유는 다음과 같다.

함수를 호출하는 입장에서 넘기려는 인자가 어떤 타입인지 알고 있으며, (이름이 같은 여러 함수 중) 특정 함수가 호출되길 기대하고 있다면, 해당 함수는 다른 이름으로 선언되는 것이 더 적절하다. -Dart.dev-