오늘은 공짜로 영화를 보게되서 기분이 좋은~ 날입니다. ㅎㅎ 회사 동료가 이벤트에 당첨되어 같이 영화를 보게된거죠~ ^^* 여러분들도
가끔은 문화생활을 해주세요~ 생활의 활력소까지는 아닙니다만, 지루한 일상에서 벗어날 순 있어요..ㅎㅎ

오늘의 주제는 함수입니다. 함수란 뭘까요? 함수란, 뭔가를 넣으면 뭔가를 내뱉는 놈입니다. 쉽죠? 이개념만 잡히면 암것도 아닌거죠.
혹시 여러분들은 멧돌을 보신적이 있으신가요? 멧돌에 콩을 넣으면 콩이 갈려져서 나오지요. 그렇습니다.
함수를 설명하고 있는겁니다. "함수는 인자를 받아서 처리하고 그 결과를 리턴한다"가 정확한 문구이고 그것을 저는 멧돌에 비유하고 있습니다.
인자는 콩이고, 결과는 갈린콩(사실, 이용어때문에 회사직원들에게 물어봤으나 정확한 용어를 모름,
알면 알려주세요^^) 입니다.

쉽게 이해하셨으리라 생각됩니다. 계속해보죠. 이러한 함수는 Javascript에서 만들어 낼 수 있는방식이 참으로 다양합니다. 그중에서도 우리는 정적함수 / 익명함수 / 리터럴 함수 를  다뤄보겠습니다.

- 정적함수(선언적 함수)
function 함수명 (인자1, 인자2, ...., 인자n) { ...처리식... }
많이 보던 형식입니다. 말그대로 정적함수이며 한번 파싱되면 메모리에 상주되어 몇번을 어떻게 호출하던지
동일한 함수객체가 생성됩니다.

- 익명함수
var fnc = new Function("인자",....,"...처리식...")
익명, 말그래로 이름이 없습니다. 직접적으로 함수를 명명하거나 선언하지 않는 함수를 익명함수라고 합니다. 익명함수가 정적함수(선언적 함수)와 다른 차이점은 익명함수는 매번 호출될때마다 다른 함수객체가
생성됩니다. 즉 런타임때 동적으로 생성되어 실행되어 지는것이죠.

- 리터럴 함수
var fnc = function (인자){..처리식..}
생긴 모습은 익명함수와 비슷하게 생겼지만 특성은 정적함수(선언적 함수)와 동일합니다. 즉 익명함수와는
다르게 페이지 로딩시 한번만 파싱되고 메모리에 상주하며 생성된후 몇번을 호출해도 같은 함수객체를
사용합니다. 여기서 오해가 있으실 것같아 부연설명합니다. 아래와 같은 함수가 있다고 가정합니다.

function test(){
   this.fnc = function(){ alert('call func'); }
}

var a = new test();
var b = new test();

위에서 말한 "몇번을 호출해도 같은 함수객체를 사용"이란 표현은 "a.fnc()을 어디에서 몇번을 호출하던지"와 동일한 뜻입니다.

b와같이 새로 객체를 생성한 것에 대해서는 적용되지 않습니다. 그리고 각각의 새로생긴 인스턴스는 동일한
객체가 아닙니다. 물론 같게 생성할 수도 있습니다. 같게 생성하려면 중고급 강좌에서 보실 수 있을 Design Pattern의 싱글톤 패턴을 공부하시면 적용하실 수 있습니다. 우리는 급할게 없습니다. 디자인 패턴에 대해서는 나중에 다룰 것이니 이번강좌에선 그냥 넘어가시지요~

이상으로 함수에 대해서 알아봤습니다. 다 알고 계신거죠? 하지만 바로 다음에 나올 강좌는 "함수 2" 입니다.
여기서는 함수의 scope와 클로져, 메모리 누수에 대해서 다루겠습니다.
오늘은 시간이 별루 없는관계로 슬쩍 끄적였습니다 ^^

posted by blankus
Javascript_base  |  2007/05/31 13:19
이 글의 트랙백 주소 :: http://www.blankus.net/trackback/6
이름 ::   비밀번호 :: 홈페이지 :: 비밀글
등록