본문 바로가기

JavsScript

[JS] JavaScript에서 오버로딩 구현하기

JavaScript에서 오버로딩 구현하기

요약 : JavaScript에서는 이를 if와 argumenttypeofinstanceof를 이용하여 구현할 수 있습니다.



안녕하세요.

최근에 JS로 더블 링크드리스트를 구현해 보았습니다.

구현하다보니 많은 욕심이 들어 일반적인 ADT를 벗어나서 마음대로 메서드들을 구현하였습니다.

그 과정에서 메서드를 오버로딩 해야할 일이 생겼습니다.


그래서 알아본 결과 JavaScript에서 언어적으로 오버로딩을 지원하지는 않지만, 그것을 구현 할 수는 있었습니다.


오버로딩은 같은 이름의 메서드를 매개변수의 타입과 갯수를 다르게 여러개 정의하는 것입니다.

목적은 다양한 매개변수에 응답하는 메서드를 구현하는 것입니다.


JavaScript에서는 이를 ifarguments, typeof, instanceof를 이용하여 구현할 수 있습니다.


if는 설명드리지 않아도 될것 같습니다.


arguments


arguments는 JavaScript에서 지원하는 함수내에서 사용 가능한 배열같은 객체입니다.

arguments에는 해당 함수에 전달된 인자들이 들어있습니다.

접근은 배열처럼 합니다. 

arguments[index]; // index번째의 인자에 접근

index는 인자순서대로 0부터 입니다.

이를 통해 전달된 인자의 갯수를 알 수 있습니다.

arguments.length; // 전달된 인자의 갯수


자세한 내용은 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/arguments



typeof


typeof는 변수의 타입을 알고자 할 때 사용할 수 있습니다.

typeof name === "string"; // name변수가 string타입인지 확인

그러나 typeof를 사용하여 알 수 있는 정보는 한정적입니다.

typeof를 이용해서 확인할 수 있는 type의 종류는 원시타입과 함수, 그리고 object입니다.

여기서 object는 말그대로 object인지 아닌지만 알 수 있습니다. 

어떤 object의 인스턴스인지를 알고 싶다면 instanceof를 사용해야 합니다.


자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof



instanceof


typeof는 객체가 어떤 클래스의 인스턴스인지 아닌지 알고자 할 때 사용할 수 있습니다.

aNode instanceof Node; // aNode객체가 Node클래스의 인스턴스인지 확인



자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof


typeof와 instanceof에 대해 잘 설명한 글 http://unikys.tistory.com/260




아래는 if와 argumentㄴ와 typeof, instanceof를 이용하여 오버로딩을 구현한 예 입니다.

인자가 0개일때와 1개일 때 동작이 다르고 1개일 때도 Node의 인스턴스일때와 아닐때의 동작이 다릅니다.





arguments를 사용하지 않고 파라메터를 작성한뒤, 이를 이용하는 방법도 있습니다.

개인적으로는 이러한 방법이 가독성 측면에서 더 좋은 방법이라고 생각합니다.