[ 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 버터백통
일반적으로 함수는 재사용이 가능하도록 명령어화 시키는 것인데 이 함수가 어떤 클래스에 포함(멤버함수)되었을 경우 해당 클래스의 메서드라고 합니다. 우리가 흔히 무비클립.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 버터백통
물리2008. 5. 25. 14:18

* 요약
변위 : 출발점과 도착점을 연결한 직선거리(변위의 크기)와 방향(변위의 방향)
속력 : 속력은 이동거리를 걸린 시간으로 나눈 값과 같다.
속도 : 변위를 걸린 시간으로 나눈 값과 같다.
상대속도 : 운동하는 관찰자가 본 속도
등속도 운동 : 물체의 운동방향과 속력이 일정한 운동
가속도 : 일정 단위 시간동안의 속도 변화량
등가속도 직선운동 : 속도가 일정하게 변하는 운동

1 속력
물체의 운동은 비행기 처럼 빠를수도 있고 거북이 처럼 느릴 수도있다. 이들의 움직임을 단지 "빠르다", "느리다"등으로 구분짓는 것은 상대적인 수치이기 때문에 이들의 운동량과 크기에 정확한 수치를 만들기 위해 만들어진 물리량이다.

[ 이동거리와 걸린시간 ]
정지하고 있는 물체가 출발점에서 이동하여 도착점에 도착하였을 때 걸린시간을 걸린시간이라하고 이물체가 출발점에서 도착점까지의 움직인 거리를 이동거리한다.
이동거리 : 도착점 - 출발점
걸린시간 : 도착시 시간 - 출발시 시간

[ 속력 ]
이동하는 물체의 빠르기를 나타내는 물리량이다.
- 1초의 단위시간 동안 물체가 이동한 거리를 속력이라 한다.
   속력(v) = 이동한 거리(s)/걸린시간(t)   ,   v = s/t (m/s)
   속력의 단위 : 1초간 움직인 거리 m/s 

[ 평균 속력과 순간속력 ]
운동하고 있는 물체는 시간에 따라 속력이 변화한다. 가령 서울발 부산행 버스같은 경우 중간에 휴게실에 서기도하고 차가 밀리기도하는 등 장애 요소를 겪고 도착지인 부산에 도착하였을 때 전체 이동거리에 대한 평균속력과 시시각에 따른 순간속력으로 구분할 수 있다.
- 대부분은 물체의 속력은 평균속력을 말하기도 한다.
  
평균속력 : 이동거리 / 총 걸린시간
   v = s/t (m/s)

   순간속력 : B지점위치 - A지점위치 / (A지점출발시간 + B지점 도착시간)
   v = s/t (m/s)

   * 순간속력은 통과하는 어떤 A지점과 그 후 아주 짧은 시간후의 B지점을 통과하는 거리와 시간을
     구해서 설정한다.

   ...............................................................................................................................................

2 속도
속도는 변위라는 개념이 도입된 것이다. 가령 두개의 물체가 같은 거리를 같은 시간으로 이동하면 같은 속력을 가지게 된다. 하지만 한개의 물체는 오른족으로 이동하고 다른 한개는 왼쪽으로 이동하였을 때 이 둘은 같은 속력을 갖고는 있어도 위치는 다르게 된다. 따라서, 물체의 운동 상태를 나타낼 때는 속력뿐만 아니라 운동방향도 함께 표시하여야 한다.

[ 속도 ]
 - 속도라는 개념은 1초의 단위 시간동안의 변위(방향과 크기)를 표현한다.
    속도의 크기 : 출발점과 도착점을 연결한 직선거리(변위의 크기) / 걸린 시간
    속도의 방향 : 처음 출발점에서 최종 도착점을 향하는 직선방향
    속도의 단위 : m/s

* 위에서 설명한거처럼 두개의 물체 움직임에 있어서 같은 속력이라도 운동방향이 다르면 속도는 다르게 된다. 한쪽 운동방향을 +라고 하면 정반대 운동 방향의 속도는 -로 나타낸다.

[ 평균 속도와 순간 속도 ]
1 평균속도는 직선상에서 물체의 속력을 변위와 같이 표현한 것이다. 구하는 식은 속력과 같지만 변위방향( △s=A에서 B가지 )을 화살표나 기호등을 붙여 표현한다. 식은 v = △s/△t (m/s)
2 순간속도는 시간간격(△t)을 매우 짧게면 변위의 s 크기도 매우작다, 이때 직선 상을 운동하는 물체의 순간속도를 구하는 것이다.. 식은 v = △s/△t (m/s)와 같다.


[ 등속 직선운동(등속도운동) ]
속력과 방향이 일정한 물체가 일직선 상으로 운동하는 것이다. 이 때 속력과 방향이 일정하므로 직선운동만 하고 이동거리는 시간에 비례한다

등속 직선 운도 그래프2

속력-시간그래프(이동 거리를 표현)

등속 직선 운도 그래프1

거리-시간그래프(속력을 표현)

- 등속 직선운동의 식
이동거리 = 속력 * 걸린시간
s = vt

[ 상대속도 ]
이동하는 관측자가 바라본 상대 물체의 속도.
가령 A라는 물체가 50의 속력으로 오른쪽으로 이동하고 있을 때 B라는 물체도 50이라는 속력으로 왼쪽으로 이동하고 있다. 이때 A에서 바라본 B의 속력은 100이다.
1) A와 같은 방향이면서 B의 속력이 클 때 :Vab = Vb - Va
2) A와 같은 방향이면서 B의 속력이 작을 때 :
Vab = Va - Vb
3) A와 반대 방향이면 :Vab = Va + Vb

...............................................................................................................................................

3 가속도
람보르 기니라는 자동차는 시속 0에서 100km에 도달하기까지 4.5초가 걸린다고 한다. 이때 이 자동차의 속력은 매초마다 증가를 하여 결국 100km라는 속력을 갖게된다. 이와 같이 시간에 따라 속도가 변할 때 이 물체는 가속도(a)운동을 한다고 한다.

가속도 = 속도의 변화량( 나중속도 - 처음속도 )/걸린시간
a = v2 - v1 / t (m/s2)

1) 단위는 미터당 시간의 제곱으로 표현한다. (m/s2) <- 제곱입니다...
2) 속력이 점점 증가하면 +, 속력이 점점 감소하면 - 가속도를 갖는다.
3) 물체의 속력이 변할 때 가속도가 생기고, 등속원운동처럼 속력은 일정해도 운동방향이 변하면 가속도가 발생한다.
4) v-t 그래프에서 직선의 기울기는 가속도를 뜻한다.


사용자 삽입 이미지

[ 평균가속도 ]
가속도가 있는 물체의 어느 구간내에서의 평균가속도이다.
평균가속도 = 속도변화량 / 걸린시간 (m/s2)
a = v2 - v1 / t2 - t1 (m/s2)

[ 순간가속도 ]
어느 구간의 한순간의 시간( v2 - v1 )을 짧게하여 그 시간동안 발생한 가속도의 크기를 얻어내는 것이다.

[ 등가속 직선운동 ]
직선상에서 일전한 가속도의 크기 a로 운동하는 것이다. 가령 람보르 기니가 출발에서 시속 100km가 되는 시간을 10초라고 한다고 이 자동차는 등가속 운동을 하였다도 정의했다. 그렇다면 이 람보르기니는 초당 시속 10km( 가속도 )씩 속력이 증가한 것이다.

( 람보르 기니의 예로 본 공식)
속도 = 처음속도 + ( 가속도*시간 )

v = v0 + a*t (m/s2)
v = 0 + ( 10 * 10 ) = v = 100(속도)

가속도  = 속도변화량( 나중속도 - 처음속도 ) / 걸린시간
a = v2 - v1 / t2 - t1 (m/s2)
a = ( 100 - 0 ) / ( 10 - 0 ) = 10(가속도)






Posted by 버터백통