트레이트 – 03.플래트닝 속성

플래트닝 속성(Flattening Property)

이미 언급했듯이 다중 상속(multiple inheritance)과 믹스인(Mixin)은 복잡한 메커니즘입니다. 복잡성을 피하기 위한 대안으로 트레이트는 클래스에 추가적인 의미를 부과하지 않도록 설계되었습니다. 트레이트는 소스 파일 상에 존재하는 실제적인 코드일 뿐입니다. 런타임(runtime)에는 트레이트에 대한 개념이 없습니다. 트레이트는 메소드를 그룹화하고 코드를 재사용하는데 사용되며, 트레이트를 조합 클래스에 완전히 플래트닝(flattening)됩니다. 클래스를 구성(build)하기 위해 지원되는 언어와도 같고, 절대 안전한 복사·붙여넣기 메커니즘과도 같습니다.

플래트닝(flattening)이란 ‘클래스에 조합된 트레이트를 컴파일할 때(compile time), 트레이트의 멤버를 복사·붙여넣기 메커니즘(copy’n’paste mechanism), 충돌 방지 메커니즘(conflict resolution mechanism), 속성 호환성 규칙(property compatibility rule) 등이 적용된 플래트닝 속성(flattening property)에 따라 해당 클래스에 배치하는 행위’입니다.

트레이트 코드를 실행시키기 위해서는 적절한 접근자(accessor)를 사용하거나, 편리한 기능을 제공하는 속성(property)을 사용해야 합니다.

플래트닝 속성(flattening property)은 트레이트를 클래스에 플래트닝(flattening)하기 위하여 사용되며, 이러한 속성에는 재정의 우선 순위(Overriding Precedence Order), 다중 트레이트(Multiple Trait), 충돌 방지(Conflict Resolution)를 위한 insteadof, as 연산자, 조합 트레이트(Traits Composed from Trait), 추상 메소드(Abstract Method), 정적 변수(Static Variable), 정적 프로퍼티(Static Property), 정적 메소드(Static Method), 프로퍼티(Property) 등이 있습니다.

플래트닝은 컴포지션 메커니즘에 몇 가지 간단한 규칙을 적용하여 수행됩니다. 문제를 해결하기 위해 화려하고 어색한 알고리즘을 구현하는 대신, 구성에 대한 전체 제어는 개발자의 손에 맡겨져 있으며 알려진 PHP 상속 모델에 잘 맞습니다.

트레이트는 소스 코드의 일부로서 시스템 구조를 정의하기 때문에 런타임(runtime) 개념이 없지만 그래도 트레이트를 (런타임시) 리플렉션(reflection)하는 것은 여전히 가능합니다. 그러나 트레이트는 시스템의 런타임(runtime) 동작(behavior)에는 영향을 주지 않습니다.

답글 남기기