2.7.1 기반 데이터에 접근(Access to Underlying Data)
2.7.1 기반 데이터에 접근(Access to Underlying Data)
이전 절의 예제에서 보았듯, 추상 메서드의 this는 기반 데이터를 가리켜요. 따라서 AbstractInt의 메서드에서 this는 Int 타입의 변수입니다.
abstract AbstractInt(Int) {
inline public function new(i:Int) {
this = i;
}
}
Haxe 4.3.0 이후 — 추상 메서드에서
abstract키워드를 사용해,this키워드로 기반 데이터를 가리키는 대신 현재 인스턴스를 추상 타입으로서 가리킬 수 있습니다.
이는 추상 메서드가 추상 타입의 인자를 받는 다른 메서드를 호출해야 할 때 유용해요. 예를 들어 클래스 Main이 takeAbstractInt 메서드를 정의한다고 해볼게요:
static public function takeAbstractInt(x:AbstractInt) {
// ...
}
AbstractInt 메서드 안에서 takeAbstractInt를 호출하려면 abstract 키워드를 사용해야 해요:
inline public function test() {
Main.takeAbstractInt(abstract);
}
만약 Main.takeAbstractInt(this)라고 쓰면 이것은 타입 오류예요. takeAbstractInt는 Int 타입 인자를 받지 않기 때문입니다.
본문
this와 기반 데이터
추상 메서드 안에서 this는 추상 인스턴스 자체가 아니라 기반 타입의 값을 가리켜요. 예를 들어 AbstractInt의 메서드에서 this는 Int입니다. 기반 타입의 값에 접근하고 수정하는 것도 이 this를 통해 합니다.
abstract 키워드로 현재 인스턴스 참조
Haxe 4.3.0부터 abstract 키워드로 추상 메서드 안에서 현재 인스턴스를 추상 타입으로 참조할 수 있어요. 이는 추상 타입 인자를 받는 다른 함수를 호출할 때 필요합니다. this(기반 타입) 대신 abstract(추상 타입)를 넘겨야 타입 오류를 피할 수 있어요.