PHP 객체 지향 프로그래밍에서의 접근 제어자와 트레이트

트레이트 사용이 상속이 아니라는 점에 주의해야 합니다. 상속에서는 private 메서드와 속성이 상속되지 않습니다.

트레이트에서는 반대입니다: 트레이트를 사용하는 클래스에서는 public 메서드와 속성뿐만 아니라 private 메서드와 속성도 모두 접근 가능합니다.

예제를 통해 살펴보겠습니다. private 메서드를 가진 다음과 같은 트레이트가 있다고 가정해 보겠습니다:

php<?php
  trait TestTrait
  {
    private function method()
    {
      return '!!!';
    }
  }
?>

트레이트를 클래스에 연결해 보겠습니다:

php<?php
  class Test
  {
    use TestTrait;
  }
  
  new Test;
?>

트레이트의 private 메서드를 사용해 보겠습니다:

php<?php
  class Test
  {
    use TestTrait; // 트레이트 연결
    
    public function __construct()
    {
      echo $this->method(); // '!!!' 출력
    }
  }
  
  new Test;
?>