본문 바로가기

UI개발

함수 오버로딩과 타입 검사

함수에 전달되는 전달인자의 개수가 다르거나 전달인자의 타입이 다른 경우 

함수가 다른 행동을 취하도록 함수를 오버로딩 하는 기능이다.

자바스크립트에서 함수 오버로딩 기능을 직접 제공하지 않지만 함수 오버로딩을 가능하게 하는 방법이 몇 가지 있다.


함수 오버로딩을 하려면 두 가지 정보가 필요하다.

1. 전달인자의 개수가 몇 개인지 결정할 수 있어야 하고,

2. 전달인자의 타입이 무엇인지 결정할 수 있어야 한다.


function sendMessage( msg, obj ){


// msg와 obj를 모두 받으면

if (arguments.length == 2){

// obj에 msg를 보낸다.

obj.alert( msg );

}else{ // 그렇지 않으면 

// 기본 메세지 출력 

alert( msg ); 

}

}

sendMessage( "hello world!" );

sendMessage( "How are you?", window );



전달 인자를 여러 개 받아 배열을 만들어 반환하는 함수.


function makeArray() {

// 임시 배열

var arr = [];


// 각 전달인자를 방문

for ( var i = 0; i < arguments.length; i ++ ){

arr.push( arguments[i] );

}

return arr;

}



인자가 전달되지 않았을 때 그 전달인자의 값이 undefined를 이용하여 에러 메시지 출력


function displayError( msg ){

// msg가 정의되었는지 검사

if ( typeif msg == "undefined"){

msg = "An error occurred"

}

alert( msg );

}



객체의 타입을 검사하는 첫 번째 방법은 typeof 연산자를 사용하는 방법이다.

typeof 연산자는 변수가 담고 있는 값의 타입을 나타내는 문자열 이름을 반환한다.


객체, 배열 또는 사용자 정의 객체를 담은 변수에 대해서는 object라는 문자열만을 반환하기 때문에 객체를 구분하기 어려운 점을 제외하고는 최적의 방법이다.


// 숫자를 담은 변수가 문자열인지 검사

if( typeof num == "string" ){

num = parseInt( num );

}


// 배열을 담은 변수가 실제로 문자열인지 검사

if( typeof arr == "string" ){

arr = arr.split(","); // 쉼표를 기준으로 문자열을 나눈다.

}


두번째 방법은 모든 자바스크립트 객체에 존재하는 constructor 라는 프로퍼티 참조하는 방법이다.


// 숫자를 담은 변수가 문자열인지 검사

if (num.constructor == String){

num = parseInt ( num );

}


// 문자열이 배열인지 검사

if ( str.constructor == Array){

str = str.join(",") // 쉼표로 연결해 문자열을 만든다.

}


변수 타입 검사하기


 Variable 

 typeof Variable 

 Variable.constructor 

 {an:"object"}

 object

 Object 

 ["an", "array"]

 object 

 Array 

 function(){}

 function 

 Function 

 "a string"

 string 

 String 

 55 

 number 

 Number 

 true 

 boolean 

 Boolean 

 new User() 

 object 

 User 



'UI개발' 카테고리의 다른 글

자바스크립트 연산자  (0) 2017.06.25
콘텍스트  (0) 2016.12.12
자바스크립트 참조 (reference)  (0) 2016.11.09
자바스크립트 Array 객체 메서드  (0) 2016.11.09
자바스크립트 오름차순, 내림차순 정렬  (0) 2016.10.25