Function 에 해당하는 글1 개
2006/12/15   Why must u use a function statement ? (3)

flash/As3.0 | 2006/12/15 14:06
Methods are defined using the function keyword.
You can use a function statement, such as the following:
public function sampleFunction() : String {}

Or you can use a variable to which you assign a function expression, as follows:
public var sampleFunction:Function = function () : String {}

In most cases you will want to use a function statement instead of a function expression for
the following reasons:

* Function statements are more concise and easier to read.
  Function statements 는 좀더 간결하고 가독성이 뛰어나다.
* Function statements allow you to use the override and final keywords.
  Function statements 는 override 와 final 키워드를 사용할 수 있게 한다.(override 방법은 expression 방법으로는 불가능합니다.)
* Function statements create a stronger bond between the identifier—that is, the name of the function—and the code within the method body. Because the value of a variable can
be changed with an assignment statement, the connection between a variable and its
function expression can be severed at any time. Although you can work around this issue
by declaring the variable with const instead of var, such a technique is not considered a
best practice because it makes the code hard to read and prevents the use of the override
and final keywords.

Function statements 는 식별자(함수 이름과 메소드 몸체안에 있는 코드) 와의 결합을 더 강하게 한다.
변수값이 할당구문에 의해 변할 수 있기 때문에 function expression 과 변수와의 연결이 언제든지 위험하게 될수 있다.
비록 var 대신에 const 를 사용하여 변수선언을 하여 문제를 해결할 수 있겠지만, 그런 기술은 오버라이드(override)와 final 키워드의 사용을 막고, 코드를 읽기 어렵게 만들기 때문에 좋은 방법이라고 생각되어지지 않는다.

One case in which you must use a function expression is when you choose to attach a function
to the prototype object.


전에는 function statement 방법과 function expression 과의 차이점에 큰 영향을 느끼지 못했다.
주로 가독성 측면에서 좋아서 전자의 방법으로 코딩을 해왔는데 이 방법이 추천하는 방식이였다니....

가독성 측면이나 메소드 오버라이드 같은 기능을 활용하려면  function statement  방법을 사용해야할 것이다.
 
 
태그 : , ,
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/74
BlogIcon aminoai 2006/12/17 21:48 ReplyDelete
좋은글 보고 갑니다. 다만 원어라서 정확하게 이해가 되지 않는군요. 그러니까 쉽게 말해서

1) public function sampleFunction() : String {}
2) public var sampleFunction:Function = function () : String {}

2보다 1을 추천한다는 의미가 맞는지요? 1은 원래 다른언어에서도 메소드 정의하는 방식이라 당연시 사용되는거고 2는 액션스크립트 고유의 방식인걸로만 알고 있었는데요. 하지만 사실 가독성면에서는 2가 더 나은거 같은데... 여튼 정확한 원문의 의미를 좀 설명해 주시면 감사하겠습니다.
BlogIcon 기정e 2006/12/18 11:45 ReplyDelete
후자의 방법은 flash MX 버전에서 콜백(callback) 형식이 등장하면서 나온 방식입니다. 솔직이 AS1.0 방식으로 코딩한다면 그다지 큰 차이는 없습니다.
여기서 말씀드리는 내용은 AS3.0 에 관한 내용입니다.

statement 와 expression 방식에는 크게 2가지 차이점이 있습니다.

첫번째로, expression 방식은 메모리 관리 측면에서 독립적으로 존재하지 못합니다. 다시말해 function expression 을 반드시 다른 오브젝트(배열이나 변수)에 할당해야만 참조가 가능한 구조입니다. 만약 실수로 위에서 나온 sampleFunction 참조 값을 delete 하게 된다면 더 이상 함수를 사용할 수 없게 됩니다.
원문에서 나온
'Function statements create a stronger bond between the identifier '

이 부분이 그런 의미로써 function statement 가 함수 식별자(이름)와 좀더 강한 결합을 생성한다고 말하고 있습니다.

두번째로, 함수 활성화 시간에 있습니다. statement 방법은 함수의 호출 위치에 상관없이 항상 호출 가능합니다. 그에 비해 expression 방법은 반드시 함수 선언 이후에만 사용이 가능하다는 것입니다.
즉,

expressionTest(); ---> 먼저 호출시 AS3.0 에서는 runtime error !!
var expressionTest:Function = function () : String {
trace("expression test......";)
}
반면 statement 방식은 아무 문제 없습니다.

원문은 제가 번역해서 다시 올려 드렸습니다....^^

아무에게도 공개 하지 않은 블로그였는데 어찌 아시고....ㅋㅋ
더 궁금한 내용이 있으시면 물어보세요....제가 아는한 성심껏 답변드리겠습니다...
그럼 이만~~
BlogIcon aminoai 2006/12/18 22:21 ReplyDelete
오호~~ 친절한 답변 감사드립니다. 저도 나름대로 플래쉬를 하면서 밥벌이를 하고 있는데 여러모로 정말 도움되는 글들이 많아서 늘 들리고 있었습니다. 사실 저도 어떤경로로 들어왔는지는 잘 기억이 안나네요. 첨 오고 바로 북마크 해버렸거든요. 사실 이후에 주변 사람에게 이 좋은 사이트를 널리널리 전파하고 있었는데 공개하고 있지 않은 사이트였다니...ㅎㅎㅎ
여튼 좋은 글 감사드리고요 추운겨울에 감기라도 걸리지 않게 건강하시기를 기원합니다.

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기


[PREV] [1] [NEXT]

 
전체 (105)
flash (74)
math&physics (4)
programming (11)
Flex2 (1)
Mac (2)
photo (0)
project (6)
주저리주저리 (3)
유용한 자료들 (1)
diary (0)
Book (1)
web (2)
«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31