트레이트 – 13.메소드 가시성 변경

메소드 가시성(visibility) 변경

트레이트는 재사용 유닛을 의미하므로 지정자는 조합된 클래스의 컨텍스트에서 쉽게 변경할 수 있어야 합니다. 이에 따라, 트레이트 메소드에 별칭을 부여할 때 메소드의 가시성 지정자(visibility modifier; 접근제한자)도 변경할 수 있습니다.

as 구문을 사용하여 조합 클래스(exhibiting class)의 메소드 가시성 수준(visibility level)을 조절할 수도 있습니다.

객체 상속에서의 가시성 변경과는 적용되는 규칙이 다릅니다. 객체 상속에서의 가시성 변경을 보면, 메소드, 프로퍼티 및 상수의 가시성을 완화할 수 있습니다. 예를 들어, protected 메소드를 public으로 완화하여 표시할 수 있지만, public 프로퍼티를 private로 제한하여 표시할 수는 없습니다.

그러나 트레이트를 조합하는 경우에는 메소드 가시성 변경에 별다른 제한을 두고 있지 않습니다. 즉 가시성 수준을 증가 시킬 수도 있고, 감소 시킬 수도 있습니다.

메소드 지정자(modifier) 변경

RFC 문서 horizontal reuse에서는 final 지정자(final modifier)를 지원한다고 되어 있는데, PHP 8 버전으로 실험해 보니 치명적인 오류(Fatal error)가 발생합니다.

또한 as 구문에서 정적 지정자(static modifier)를 사용할 수 없습니다. 즉, 정적 지정자가 사용되면 메소드 의미 체계(semantics)를 변경되고 $this에 대한 참조가 중단되기 때문에 일반 메소드는 정적 메소드로 변환할 수 없습니다.

답글 남기기