본문 바로가기

Flash/ActionScript 2.0

[MissFlash의 Flash ActionScript 2.0] 4. 클래스 (3)

* 본 포스트는 "콜린 무크의 Flash ActionScript 2.0"의 내용을 정리, 가공한 것입니다.
* 본 포스트를 퍼가실 때는 상단에 아래와 같이 원본출처를 명시해 주세요! ^^
원본 : http://blog.missflash.com/
출처 : MissFlash.com, http ://www.missflash.com/
* 포스트의 내용중 일부가 추가/수정될 수 있으므로 최신 내용을 접하고 싶으신 분은 원본글을 이용하시기 바랍니다.

5. 생성자 함수(2단계)

생성자 함수의 기능은 새로운 인스턴스를 초기화하는 것입니다. 클래스의 인스턴스를 생성하는 것은 new 연산자이지만, 생성자 함수를 통해 (내부속성을 설정하거나 메소드를 실행함으로써) 인스턴스가 초기화됩니다.

* 생성자 함수의 규칙
- 생성자 함수의 이름은 클래스의 이름과 일치해야 합니다.(대소문자 구별도 동일해야 함)
- 생성자 함수는 반환 값의 데이터타입을 명시할 수 없습니다.(Void도 사용불가)
- 생성자 함수는 반환 값을 전달 할 수 없습니다.(return문은 사용가능하지만, 값을 반환하지는 않음)
- 생성자 함수의 선언은 static 속성으로 정의할 수 없습니다.(public이나 private로 사용할 수는 있음)

* 참고사항
- 생성자 함수가 없으면 ActionScript는 자동으로 어떤 초기화 동작도 없는 생성자 함수를 자동으로 추가합니다.
- 하지만, 생성자 함수를 직접 만드는 습관을 들이는 것이 좋습니다.

* private 생성자 함수
- private 생성자 함수를 가지는 클래스에서 인스턴스를 생성하기 위해서는 인스턴스를 생성하고 반환하는 클래스 메소드를 제공해야 합니다.
class Car{
 private function Car(){
 }

 public static function getCar():Car{
  return new Car();
 }
}

var c:Car = Car.getCar();

* private 생성자 함수를 사용하는 경우
- 자바 스타일의 추상 클래스 모델을 가상으로 제작하는 경우(클래스 자체를 인스턴스로 만들수는 없지만, 상속에 의해 사용하는 경우)
- 클래스의 인스턴스를 생성할 때와 생성 방법 등에 제약이 필요한 경우(클래스에 하나의 오브젝트만 생성하도록 제한할 경우 등)

1) 다중 생성자 함수 모방하기
- 생성자 오버로딩의 예
class Box{
 public var color:String;
 public var doorNum:Number;

 public function Car(a1:Object, a2:Object){
  if (arguments.length == 0){ // Argument 입력이 없을 때
   CarNoArgs();
  }else if (typeof a1 == "string"){ // 첫 번째 Argument가 String 타입일 때
   CarString(a1);
  }else if (typeof a1 == "string" && typeof a2 == "number"){ // 첫 번째 Argument가 String 타입, 두 번째 Argument가 Number 타입일 때
   CarStringNumber(a1,a2);
  }else{ // 어떤 경우에도 해당하지 않을 때
   trace("Arguments를 잘 못 입력했습니다.");
  }

 private function CarNoArgs():Void{
  if (arguments.caller != Car){ // Car 생성자가 호출한 것이 아니라면, 프로그램을 중단
   return;
  }
  // ...
 }
 private function CarString(col):Void{
  // ...
 }
 private function CarStringNumber(col,door):Void{
  // ...
 }
}

var c1:Car = new Car(); // CarNoArgs() 호출
var c2:Car = new Car("white"); // CarString() 호출
var c3:Car = new Car("white",4); // CarStringNumber() 호출

2) 생성자 함수에서 this의 사용
생성자 함수 내부에서 this 키워드는 새롭게 생성된 인스턴스를 가리키는 사용됩니다.

3) 생성자 함수 vs. 기본 속성 값
인스턴스 속성을 선언하면서 기본 값을 초기화 할 수 있지만, 생성자에서 인스턴스 속성을 초기화하는 것이 바람직합니다.