[ return ]
어떠한 메서드는 값을 대입하면 원하는 값을 추출하여 이를 반환하도록 만들어야 하는경우가 있다.
가령 a = Math.random( 값 )을 코딩하면 값에 따라 어떠한 임의의 수를 변수 a에 대입하게 된다.
또는 사용자가 어떤 값을 넣으면 10을 더해서 반환하는 메서드를 만들었다고 가정하자.
a = logic( 10 )
trace( a ) //출력 : 20
과 같이 입력된 수에 10을 더하여 이를 반환하도록 하는 메서드를 만들기 위해서는 메서드 내부에서
들어온 파라미터의 값에 10을 더하여 return하게 된다
public function logic( value:Number ):Number
{
     var result:Number = value + 10;
     return result;
}
10을 더하여 반환하는 메서드는 위와 같다. 우리가 주목해야 할 것은 메서드 마지막 명령문인 return과 함수 선언문 마지막에 붙어있는 반환데이터 타입인 Number이다.

반환문 return이 붙어있는 메서드는 데이터 타입을 반드시 return의 데이터타입과 일치하게 코딩하여야 한다.
가령 return "String"; 과 같이 문자열을 반환하는 메서드는 반환 데이터 타입을 String으로 맞추어야 한다.
public function test():String
{
    
return "문자열";
}

* 반환값이 없는 메서드:void에서의 return 
return은 반환데이터 타입이 없는 void에서도 사용된다. 이 경우에는 메서드가 그 즉시 실행을 종료하기 위해서 사용한다.
* 단 void 메서드인 경우 return에 값을 넣으면 안된다!!
public function test( name:Stirng ):void
{
     if( name != "olga" ){
          return;
     }  
     trace( "오~ 방가루~" );
}
이 코드를 보면 입력받은 파라미터의 인자가 "olga"가 아닌 경우에 조건문 if에 의해 return을 실행하게 된다.
실행이되면 이 메서드는 실행을 중단하고 코드블럭에서 빠져나가게 된다...따라서 화면에 "오~방가루~"를 볼 수없게 된다. 하지만 인자가 "olga"인 경우에는 조건문은 실행하지 않으므로 "오~방가루~"라는 메세지를 출력하게 된다.
이처럼 return은 메서드에서 값을 반환하거나 void메서드에서 실행을 종료시킬때 사용한다.

return을 배워 보았다. 이러한 방식을 사용한 메서드중에 getter라고하는데 이는 특정값을 반환하는데 사용하며 값을 설정하는 메서드를 setter라고한다.

[ getter 와 setter ]
AS1~2에서 플래시로 무비를 만들 때 어떠한 무비클립의 위치를 알기 위해서 흔히 trace( mc._x )와 같이 코딩하여 위치를 수식으로 확인하였다. 또는 _x = 100과 같이 값을 대입하여 해당 무비클립의 위치를 바꾸기도 하였는데 바로 이러한 속성을 처리하는 메서드가 setter와 getter인 것이다.
(참고로 AS3에서는 모든 속성에서 언더바가 사라졌다. )

가령 mc라는 무비클립의 x위치를 trace한다면
var a:int = mc.x;
trace( a );
이거나 아래처럼 바로 trace에 명령문을 넣어서
trace( mc.x )와 같이 처리할 것이고, 이를 처리하는 속성 x는 mc의 x위치를 찾아 반환하는 메서드이다.
또한 mc의 x위치를 100으로 이동하고자 mc.x = 100이라 코딩하였다면 mc는 100인 위치로 이동하게 된다.
속성 x는 바로 값을 넣기도 하며 값을 반환하기도 한다.
반환하는 속성은 getter에 해당하는 부분이고 x = 100과 같이 값을 입력하는 부분은 setter에 속하게 된다.
이들은 외부에서 접근하여 값을 추출하거나 대입하여야 하므로 스코프는 public으로 선언되어있어야 하고
다른 메서드들과 다르게 같은 이름으로 선언할 수 있다!! 하지만! setter/getter로 구분하는 set/get을 선언하여야 한다.

가령 x속성 중에 현재의 x위치를 반환하는 getter는 다음과 같다.(getter를 setter위에 선언하는 것이 좋다)
public function get x():Number
{
      ......
      return 자신의 x위치를 반환하는 값이나 변수;
}
getter가 실행되는 부분은 대입연산자가 있거나 trace등에서 자동적으로 getter가 실행한다.
var a:Number = mc.x / trace( mc.x )일 때는 getter이다

또한 x = 100 과 같이 메서드 x가 값을 받는 setter인 경우는 다음과 같을 것이다.
public function set x( value:Number ):void{
      .......
     입력받은 값으로 x위치를 이동시키는 명령문들;   
}

mc.x = 100과 같이 대입연산자를 사용하여 값을 입력할 수 있는 부분이 setter이다. 만약 set으로 메서드처리 하지않았다면....mc.x(100)과 같이 설정하여야 했을 것이다....

이와 같이 setter와 getter를 사용하여 입력/반환등을 처리하는 속성을 만들면 a = 10과 같이 값을 입력할 수 있고 v = a와 같이 값을 받아 처리 할 수 있어 비교적 코딩이 깔끔해진다. (a(10) 보다 a = 10이 보기 좋지 않을 까요??)














Posted by 버터백통