일반적으로 함수는 재사용이 가능하도록 명령어화 시키는 것인데 이 함수가 어떤 클래스에 포함(멤버함수)되었을 경우 해당 클래스의 메서드라고 합니다. 우리가 흔히 무비클립.stop()이라는 메서드를 호출하여 무비를 정지 시키는 것을 플래시에서 많이 다루어 보았습니다. 이는 무비클립이라는 클래스에 stop()이라는 public함수로서 무비클립의 메서드라고 배웠습니다.

함수는 비슷한 동작을 여러번 사용하여야 할 경우에 주로 만들어 지며 경우에 따라 함수(static function) 자체가 클래스자체로 존재하는 경우도 있습니다.

1) 함수의 접근 제한자
private : 클래스 내부에서만 접근이 가능하다.

protected : 자신의 클래스내부나 상속받은 하위 클래스에서 접근이 가능하다.

internal : 자신의 클래스나 같은 패키지 안에서 접근이 가능하다.

public : 프로젝트 내에서 어떠한 경로에서든 접근이 가능하다.

위와 같은 접근 제한자를 두어 클래스의 멤버함수, 즉 클래스의 메서드로 만들면 접근제한 규칙에 따라 클래스 내부나 외부에서 호출하여 실행 시킬 수 있다.

가령 같은 클래스에서 선을 그리는 함수를 만든다고 하면 아래와 같다.
private function make():void
{
  for(var i:int=0; i<10; i++){
     drawLine();  // 함수의 호출부분
   }
}
//실제로 선을 그리는 함수 : 클래스 내부에서만 사용하기 때문에 private으로 설정하였다.
private function drawLine():void
{
    this.graphics.lineStyle(1,Math.random()*0xFFFFFF,1);
    this.graphics.moveTo(Math.random()*550,Math.random()*400);
    this.graphics.lineTo(Math.random()*550,Math.random()*400);
}
위 코드를 보면 make라는 함수에서 실제로 선을 그리는 함수drawLine 를 10번 호출하게 된다. drawLine 함수는 랜덤하게 화면에 선을 그리게 된다.


[ 실행시킨 화면 ]





2) static선언
* 메서드나 변수등은 필요에 따라 메모리의 상수영역(constant & code segment)에 등록하여 Delegate없이 바로 가져와 사용하기도 한다.
public static var a:String = "a"; //변수 a를 정적요소로 선언
public static const b:String = "b"; //상수 b를 정적요소로 선언
public static function c():void // 메서드(함수) c를 정적요소로 선언
{
     명령문;
}
위와 같이 함수나 상수, 변수에 static을 추가하면 이들 요소는 실행시 메모리 상수영역에 등록하게 되어 공간을 차지하게 된다. 이들의 참조(reference)는 Delegate없이 호출하고자 할때는 선언된 클래스를 직접 호출하여 사용한다.

가령 Alert이라는 클래스에 showMessage라는 메서드가 있을 때 선언은 다음과 같다.
public static function showMessage( v:string ):void
{
     trace( v )
}

위 메서드는 패키지 어디에서든 호출하여 사용하고 싶다. 따라서 접근제한자를 public으로 선언하였고 호출시 인자(argument)주어 파라미터의 값인 v의 값으로 메세지를 바꾸고 싶다.

private function showAlert():void
{
    Alert.showMessage("호출!!")
}

Alert의 메서드인 showMessage()을 호출하는 코드인데 호출시 argument를 "호출!!"이라고 넘겼다
따라서 출력창에 "호출!!"이라는 메세지가 나타나게 된다.
* static 선언 객체의 호출시 상대경로(this등)는 사용할수 없다

3) 함수의 파라미터
* 매개변수( Parameter ) : 메서드에서 선언된 (받아들이는)변수
* 인자( argument ) : 메서드를 호출할 때 넘겨주는 값
 - gotoAndStop(10) //10번 프레임으로 가서 멈추어라
   : 가령 메서드 gotoAndStop( 파라미터:Number )등으로 만들고 파라미터는 숫자를 받겠다고 선언하였고, 이 메서드를 호출시 필요한 값인 10이 인자이다. (물론 실제의 gotoAndStop()은 예보다 잘 만들어진 구조이다. )

[ 메서드의 인자배열 활용 ]
* 메서드에서 사용할 인자(arguments)의 개수가 일정하지 않는 경우 메서드의 parameter를 설정하기가 힘들다. 이런 경우에 AS3에서 제공하는 인자 배열 : arguments를 사용하면 메서드 활용에 효율적이다.
private function init( ):void
   {
     println("Hello World");
     test_Arguments( 1 , 2 , 3 , "1" , "2" , "3"   )
   }
   
   //파라미터가 1개인 함수
public function println(str:String):void {
       trace(arguments.callee == this.println); // true : 현재 실행 중인 함수에 대한 참조입니다.
       trace(arguments.length);                 // 1
       trace(arguments[0]);                     // Hello World
       trace(str);                                // Hello World
}
       
       
   //파라미터의 개수를 설정하지 않은 함수  
   private function test_Arguments( ...arguments ):void
   {
          trace( "인자의 개수 : " , arguments.length ); // 출력 : 인자의 개수 :  6
   }


파라미터를 특별히 정하지 않고 제공되는 인자배열을 사용하려면 " ...arguments "라는 것을 메서드 파라미터 부분에 추가하여 사용하면 된다.
Posted by 버터백통