반응형
Web Development · PHP trait
PHP trait —
여러 클래스에 같은 기능을 끼워 넣기 (수평 상속)
extends와 use를 함께 사용하는 다중 재사용 패턴
시작 오늘 분석할 코드
trait SayMorning{ public function print_morning(){ print $this->name; print "님, 안녕하세요!<BR>"; } } class User{ private $name = null; public function print_hello(){...} } class Guest extends User{ use SayMorning; // trait 끼워 넣기 (수평 상속) private $name = "게스트"; public function print_hello(){...} } $newuser = new Guest(); $newuser->print_hello(); // 오버라이딩된 자식 메서드 $newuser->print_morning(); // trait의 메서드
게스트님, 처음 뵙겠습니다!
게스트님, 안녕하세요!
게스트님, 안녕하세요!
Guest는 User를 부모로 상속(수직)하면서 SayMorning trait도 함께 사용(수평) — PHP의 단일 상속 한계를 trait로 보완.
용어 용어 정리
trait메서드 묶음을 클래스에 끼워 넣는 도구
usetrait를 클래스에 적용
수평 상속부모-자식 관계가 아닌 기능 공유
vs classtrait는 인스턴스화 못 함 — 끼워 넣기만
vs interfaceinterface는 시그니처만, trait는 구현 포함
다중 use한 클래스에 여러 trait 가능
메서드 충돌insteadof / as 키워드로 해결
실무로깅·캐시·검증 등 횡단 관심사
1 수직 vs 수평 상속
수직 (extends)
부모-자식 관계
"is-a" — Guest는 User다
1개만 가능
"is-a" — Guest는 User다
1개만 가능
수평 (trait)
기능 공유
"can" — Guest는 SayMorning 가능
여러 개 가능
"can" — Guest는 SayMorning 가능
여러 개 가능
2 여러 trait 사용
trait Loggable { public function log() { ... } } trait Cacheable { public function cache() { ... } } class Service { use Loggable, Cacheable; // 두 trait 모두 }
3 trait의 한계
· 객체로 만들 수 없음 —
· 정적 분석에 어려움 (의존성 추적 까다로움)
· 너무 많은 trait 사용 시 코드 흐름 파악 어려워짐
· 같은 메서드 이름 충돌 시 명시적 해결 필요
new Trait() 불가· 정적 분석에 어려움 (의존성 추적 까다로움)
· 너무 많은 trait 사용 시 코드 흐름 파악 어려워짐
· 같은 메서드 이름 충돌 시 명시적 해결 필요
반응형
4 trait vs interface
// interface — "이런 메서드를 구현하라"는 약속만 interface Loggable { public function log(); // 시그니처만 } // trait — "이런 메서드를 그대로 받아라" trait Loggable { public function log() { echo "log: " . date('Y-m-d'); // 실제 구현 포함 } }
핵심 한 줄 요약
trait기능 묶음 — 클래스에 끼워 넣기
use 키워드클래스 안에 trait 적용
수평 상속부모-자식 관계 아닌 기능 공유
extends + use수직과 수평 동시 가능
다중 trait한 클래스에 여러 use OK
vs interfacetrait는 구현 포함, interface는 시그니처만
실무로깅·캐시·인증 등 공통 기능
반응형
'php' 카테고리의 다른 글
| PHP 개인테스트 — form + class + getter/setter 연동 완전 정리 (0) | 2026.06.18 |
|---|---|
| PHP runtime — 런타임 상태와 메서드 오버라이딩 완전 정리 (0) | 2026.06.18 |
| PHP extends — 클래스 상속과 메서드 오버라이딩 완전 정리 (0) | 2026.06.18 |
| PHP Member 클래스 — getter/setter로 회원 정보 관리 완전 정리 (0) | 2026.06.18 |
| PHP getter — private 멤버를 메서드로 우회 접근 완전 정리 (0) | 2026.06.18 |
왕진 블로그

댓글