FLASH/AS3.0기초

클래스와 객체

지식사랑 2012. 10. 29. 10:17

클래스는 연관있는 함수와 변수를 묶는 것입니다.

변수와 메서드 들의 모임으로서 "자기일은 자기가 처리한다"라는 객체지향 개념을 구현하기 위한 단위가 됩니다.

 

빌트인 클래스 : 플래시 내부에 만들어져 있는 클래스

사용자 클래스 : 유저가 만들어서 사용하는 클래스

 

자료구조에 대해 알아 보도록 하겠습니다.

데이터를 저장하는 관점의 발전단계는 아래와 같습니다.

변수 → 배열 → 구조체 → 클래스

 

클래스도 하나의 데이터 타입입니다.

메모리에 저장해야 하므로 데이터 타입이 필요합니다.

다음은 각각의 숫자, 배열, 객체, 클래스를 정의하는 예제입니다.

 

var i:Number = 314;
var arr1:Array = new Array();
var obj1:Object = new Object();
var myClass:Class = new Class()

 

var my:MyClass =  new MyClass();

위의 코드와 아래의 코드는 같습니다.

MyClass타입으로 my변수를 선언하고 my변수에 MyClass에서 생성한 객체 인스턴스가 할당 된 것을 코드로 표현한 것입니다.
var my:Myclass;
my = new MyClass()

 

 

 

객체 생성방법

 

객체는 클래스를 틀로해서 생성되는 인스턴스입니다.

객체를 생성하려면 클래스와 new라는 연산자를 사용하면 됩니다.

 

var mc:MovieClip;
mc = new MovieClip();

 

이렇게 하거나 아래처럼 작성하면 객체가 생성됩니다.

var mc:MovieClip = new MocieClip();

 

 

 

클래스 만드는 방법

클래스 = 변수 + 함수 + 클래스문법



 

<클래스 기본 형식>

① 한 클래스당 한 개의 package를 원칙으로 합니다. package 밖에 클래스 작성 가능합니다.

② package 안에 클래스 몸체가 있습니다.

③ 클래스 몸체 외부에는 import 문을 사용하여 외부에서 만든 클래스를 import할 수 있습니다.

④ 저장할 때는 반드시 클래스 이름으로 저장합니다.

 

하나의 클래스에서 여러개의 독립적인 인스턴스를 생성할 수 있습니다.

다음은 인스턴스 생성예제입니다.

import MyClass;

var hong:MyClass = new MyClass();

 

 

 

(예제) 다음 구조적 프로그램을 클래스를 사용한 코드로 바꿔봅시다.

public var kor:Number = 89;
public var math:Number = 87;
public var eng:Number =45;
public var Name:String = "racoon";
  
public var kor2:Number = 100;
public var math2:Number = 99;
public var eng2:Number =98;
public var Name2:String = "techtree";

 

function grade(s:String, k:Number, m:Number, e:Number):void{
 var total:Number = Math.ceil((k+m+e)/3);
 trace(s+"학생의 평균점수 : "+total+" 입니다.");
}
grade("racoon", 89, 87, 45);  //racoon학생의 평균점수 : 74 입니다.
grade("techtree", 100, 99, 98); 
//techtree학생의 평균점수 : 99 입니다.

 

 

 

1. 생성자를 이용하여 메서드를 만드는 방법으로 구현해 봅시다.

 

[생성자 사용 원칙]

생성자 메서드 이름은 클래스 이름과 같아야 한다.

리턴값은 없다.

 

 

Class_Main.fla라는 파일을 만듭니다.

타임라인 첫프레임에 다음과 같이 입력합니다.

 

import MyClass;

var hong:MyClass = new MyClass();

 

 

MyClass.as라는 파일을 별도로 만들어 보도록 하겠습니다.

 

package {

 public class MyClass {

  public var kor:Number = 89;
  public var math:Number = 87;
  public var eng:Number =45;
  public var Name:String = "racoon";
  
  public var kor2:Number = 100;
  public var math2:Number = 99;
  public var eng2:Number =98;
  public var Name2:String = "techtree";

 

  //이 부분이 생성자 부분입니다.

  public function MyClass() {
   grade(Name,kor,math,eng);
   grade(Name2,kor2,math2,eng2);
  }
  
  
  public function grade(student:String,k:Number,m:Number,e:Number):void {
   var total:Number = Math.ceil((k + m+ e )/3);
   trace(student + " 학생의 평균 점수는 =" + total +"입니다.");
  }
 }
}

 

결과는 아래와 같습니다.

racoon 학생의 평균 점수는 =74입니다.
techtree 학생의 평균 점수는 =99입니다.

 

 

 

2. 두번째 방법 : 객체.메서드() 형식 

생성자 메서드를 사용하지 않고 메서드를 호출하여 실행하려면 클래스에서 객체 생성 후 메서드를 호출해야 합니다.

아래와 같이 코드를 생성하고 showScore() 메서드를 호출하는 방식으로 한다면

MyClass.as 코드는 다음과 같이 작성할 수 있습니다.

 

MyClass.as라는 파일을 별도로 만들어 보도록 하겠습니다.

 

package {

 public class MyClass {

  public var kor:Number = 89;
  public var math:Number = 87;
  public var eng:Number =45;
  public var Name:String = "racoon";
  
  public var kor2:Number = 100;
  public var math2:Number = 99;
  public var eng2:Number =98;
  public var Name2:String = "techtree";

 

  //이 부분에 생성자 대신에 메서드를 정의합니다.

  public function showScore() {
   grade(Name,kor,math,eng);
   grade(Name2,kor2,math2,eng2);
  }
  
  
  public function grade(student:String,k:Number,m:Number,e:Number):void {
   var total:Number = Math.ceil((k + m+ e )/3);
   trace(student + " 학생의 평균 점수는 =" + total +"입니다.");
  }
 }
}

 

Class_Main.fla라는 파일을 만듭니다.

타임라인 첫프레임에 다음과 같이 입력합니다.

 

import MyClass;

var hong:MyClass = new MyClass();

hong.showScore();

 

결과는 아래와 같습니다.

racoon 학생의 평균 점수는 =74입니다.
techtree 학생의 평균 점수는 =99입니다.