PHP PHP에서 인터페이스와 트레이트 혼용 설계 팁
페이지 정보

영삼이
본문
✅ PHP에서 인터페이스와 트레이트 혼용 설계 팁
인터페이스와 **트레이트(Trait)**는 객체지향 PHP에서 전혀 다른 목적을 가지고 있지만, 함께 사용하면 유연하고 재사용성 높은 설계를 할 수 있습니다.
🔍 인터페이스 vs 트레이트
-
인터페이스: 클래스가 구현해야 할 메서드의 "형태"만 정의 (강제 계약)
-
트레이트: 다중 상속의 대안, 실제 메서드 구현을 공유 가능 (코드 재사용)
🧩 인터페이스 + 트레이트 조합 예시
[code=php]
interface LoggerInterface {
public function log(string $message): void;
}
trait FileLoggerTrait {
public function log(string $message): void {
file_put_contents('log.txt', $message . PHP_EOL, FILE_APPEND);
}
}
[/code]
[code=php]
class UserService implements LoggerInterface {
use FileLoggerTrait;
public function createUser() {
// 사용자 생성 로직
$this->log("User created");
}
}
[/code]
-
LoggerInterface
는 계약(메서드 시그니처)을 강제 -
FileLoggerTrait
는 그 구현을 제공 -
UserService
는 구현체이자 재사용 가능한 구조가 됨
💡 강제성과 재사용의 분리
-
인터페이스는 "이 메서드는 반드시 있어야 해" 라는 강제
-
트레이트는 "이 코드는 공통이야, 재사용하자" 라는 공유
-
둘을 조합하면 강제성과 재사용을 동시에 충족할 수 있음
⚠️ 주의점
-
트레이트 내부에서 인터페이스 준수를 보장하지 않음
→ 트레이트가log()
를 제공해도 클래스가implements LoggerInterface
하지 않으면 계약이 아님 -
이름 충돌 주의
→ 여러 트레이트를 사용할 경우 동일 메서드가 있으면 충돌 가능
✅ 정리
-
인터페이스는 "구조", 트레이트는 "내용"
-
클래스는 인터페이스를 구현하고, 트레이트로 그 구현을 공유
-
이 조합은 유지보수와 테스트를 더 깔끔하게 만들어줌
- 이전글PHP 8의 match() 활용법과 실제 사례 25.03.28
- 다음글Laravel 없이 PHP로 PSR-4 오토로딩 구현하기 25.03.28
댓글목록
등록된 댓글이 없습니다.