⊗ppOpTrInr 77 of 107 menu

PHP OOP에서의 트레이트

아시다시피, PHP에서는 여러 클래스를 동시에 상속할 수 없으며, 오직 하나의 클래스만 상속할 수 있습니다. 이전에 우리는 이 문제를 해결하는 방법을 배웠습니다: 상속 대신 다른 클래스의 객체를 사용하는 것입니다.

PHP에는 또 다른 방법이 있습니다. 바로 트레이트를 사용하는 것입니다. 트레이트는 다른 클래스에 포함시킬 수 있는 속성과 메서드의 집합입니다. 이때 트레이트의 속성과 메서드는 마치 해당 클래스의 것처럼 인식됩니다.

트레이트의 구문은 클래스와 동일하며, 트레이트 이름은 trait 키워드를 사용하여 선언한다는 점만 다릅니다.

트레이트의 인스턴스를 직접 생성할 수 없습니다. 트레이트는 오직 다른 클래스에 연결하기 위한 것입니다. 연결 자체는 use 명령어를 사용하여 수행되며, 이 명령어 뒤에 공백을 두고 연결할 트레이트의 이름을 지정합니다. 이 명령어는 클래스 시작 부분에 작성됩니다.

실제 예제를 통해 트레이트의 적용을 살펴보겠습니다. 비공개 속성 nameage, 그리고 이들의 게터 메서드를 포함하는 Helper라는 트레이트가 다음과 같이 주어져 있다고 가정해 보겠습니다:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

또한, 생성자에서 nameage 속성을 설정하는 User 클래스가 다음과 같이 있다고 가정합니다:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

이제 User 클래스의 속성에 대한 게터 메서드를 추가해 보겠습니다. 단, 이 메서드들을 클래스 자체에 작성하지 않고, 해당 메서드들이 이미 구현된 Helper 트레이트를 간단히 연결하겠습니다:

<?php class User { use Helper; // 트레이트 연결 public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

트레이트를 연결한 후에는 우리 클래스에 해당 트레이트의 메서드와 속성이 나타납니다. 이때 우리는 이 메서드와 속성에 마치 클래스 자체의 메서드와 속성인 것처럼 접근하게 됩니다:

<?php $user = new User('john', 30); echo $user->getName(); // 'john' 출력 echo $user->getAge(); // 30 출력 ?>

name, age, population 속성과 이들에 대한 게터 메서드를 가진 City 클래스를 구현하세요. 우리 클래스가 이미 생성된 Helper 트레이트를 사용하여 코드를 줄이도록 하세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부