public class Shape
{
    var visible:Boolean = true;
}
true 값을 가지고 있는 visible이라는 Boolean 타입 변수를 가지고 있는 Shape 클래스.
// ActionScript 2.0
class flash.display.BitmapData {}
// ActionScript 3.0
package flash.display
{
public class BitmapData {}
}
3.0 부터는 package문을 사용하기 때문에 클래스 이름에 패키지 이름을 선언할 필요 없다.
클래스 속성(class attributes)
dynamic: 실행 중에 인스턴스에 추가적인 속성을 추가할 수 있다.
final: 다른 클래스가 확장할 수 없다.
internal(default): 같은 패키지에서만 참조할 수 있다.
public: 모든 곳에서 참조할 수 있다.
생략하면 internal 사용.
클래스 본문
변수, 상수, 메서드 등을 정의할 수 있다. 
function hello():String
{
    trace("hola");
}
class SampleClass
{
    hello();
    trace("class created");
}
3.0 부터는 명령문도 포함시킬 수 있다.
class StaticTest
{
static var message:String = "static variable";
var message:String = "instance variable";
}
// In your script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: static variable
trace(myST.message); // output: instance variable
3.0 부터는 static 변수와 인스턴스 변수 이름가 같은 이름을 사용할 수 있다.
클래스 프로퍼티 속성(class property attributes)
클래스의 프로퍼티들이 가질 수 있는 속성
internal(default): 같은 패키지에서만 참조 가능
private: 같은 클래스 내부에에서만 참조 가능
protected: 같은 클래스와 상속 받는 클래스에서 참조 가능.
public: 어디서나 참조 가능
static: 해당 프로퍼티가 클래스에 속한다는 것을 명시.
사용자 정의 네임스페이스: 사용자가 정의한 커스텀 네임스페이스
2.0에서는 private으로 해놔도 실행 중에 []를 사용해서 접근할 수 있는데. 3.0부터는 안 됨. 대신 클래스가 dynamic으로 선언되어 있으면 접근은 되지만 undefined가 반한됨.
static 특성
상송되지 않음. 
클래스 범위에 속함. 
인스턴스가 아니라 클래스 이름으로 접근해야 함.
사용자 정의 네임스페이스
패스 나중에 자세히
변수
var 또는 const를 사용하여 선언할 수 있다.
const 키워드로 선언한 것을 상수라고 한다.
정적 변수
class StaticVars
{
public static var totalCount:int = 0;
public static const MAX_NUM:uint = 16;
}
var또는 const와 static을 추가하여 선언한다.
클래스의 인스턴스가 아니라 클래스에 연결된다.
외부에서는 반드시 클래스 이름으로 접근해야 한다. 인스턴스로 접근하면 에러 난다.
선언할 때 초기화 해야한다. 안그러면 에러난다.
인스턴스 변수
static 키워드 없이 var 또는 const로 선언한 것.
인스턴스 마다 고유한 값을 가진다.
하위 클래스에서 재정의 할 수 없다. getter나 setter를 재정의하면 된다.
메서드
클래스 정의에 포함되는 함수.
function이라는 키워드로 정의한다.
함수 명령문으로 함수 정의
public function sampleFunction():String {}
함수 표현식으로 함수 정의
public var sampleFunction:Function = function () {}
함수 명령문 사용하는 이유
- 간결하고 쉽게 읽을 수 있다.
- override나 final 키워드 사용가능
생성자 메서드
클래스 이름과 같은 이름을 가진 함수
new 키워드로 해당 클래스의 인스턴스를 만들 떄 사용한다.
class Example
{
public var status:String;
public function Example()
{
status = "initialized";
}
}
var myExample:Example = new Example();
trace(myExample.status); // output: initialized
생성자에는 public만 사용가능. 생략하면 기본으로 public. 사용자 정의 네임스페이스도 사용 못함.
super()를 사용하여 상위 클래스의 생성자를 명시적으로 호출 가능.
super()를 명시적으로 호출하지 않으면 자동으로 제일 먼저 호출해줌.
return 문을 사용할 수는 없지만 값을 반환하지는 못한다.
정적 메서드
static 키워드로 선언한 메서드.
인스턴스가 아니라 클래스에 연결된다.
인스턴스 메서드
static 키워드 없이 선언한 메서드
getter와 settter 메서드
class GetSet
{
    private var privateProperty:String;
    public function get publicAccess():String
    {
        return privateProperty;
    }
    public function set publicAccess(setValue:String):void
    {
        privateProperty = setValue;
    }
}
getXXX, setXXX 라는 이름을 사용하지 않아도 된다.
var myGetSet:GetSet = new GetSet();
trace(myGetSet.publicAccess); // output: null
myGetSet.publicAccess = "hello";
trace(myGetSet.publicAccess); // output: hello
이렇게 사용할 수 있다.
바운드 메서드(메서드 클로저)
함수의 인자로 전달되는 메서드
함수의 반환값으로 전달되는 메서드
바운드 메서드 내부에서 this는 해당 메서드를 구현하는 인스턴스에 연결된다.
함수 클로저의 this는 호출 시점에 함수와 연결된 객체를 가리킨다. 이게 차이점이다.
class ThisTest {
    private var num:Number=3;
    function foo():void // bound method defined
    {
        trace("foo's this: " + this);
        trace("num: " + num);
    }
    function bar():Function
    {
        return foo; // bound method returned
    }
}
var myTest:ThisTest = new ThisTest();
var myFunc:Function = myTest.bar();
trace(this); 
// output: [object global]
myFunc();
/* output: 
foo's this: [object ThisTest]
output: num: 3 */
myFunc()는 바운드 메서드라 this가 여전히 자신이 속한 원래 인스턴스를 가리키고 있다.
클래스와 enum
enum을 지원하는게 딱히 없음.
그냥 java 5 이전처럼 static const 사용해서 정의.
public final class Day
{
public static const MONDAY:Day = new Day();
public static const TUESDAY:Day = new Day();
public static const WEDNESDAY:Day = new Day();
public static const THURSDAY:Day = new Day();
public static const FRIDAY:Day = new Day();
public static const SATURDAY:Day = new Day();
public static const SUNDAY:Day = new Day();
}

[#M_더보기|접기|

_M#]