본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP extends — 클래스 상속과 메서드 오버라이딩 완전 정리

by 왕진 2026. 6. 18.
반응형

 

 

Web Development · PHP extends

PHP 클래스 상속 —
extends + 메서드 오버라이딩

자식 클래스가 부모를 물려받고 일부 메서드 재정의
시작 오늘 분석할 코드
class User{ private $name = null; public function print_hello(){ print $this->name; print " 님, 안녕하세요!<BR>"; } } class Guest extends User{ private $name = "게스트"; public function print_hello(){ // 부모의 같은 이름 메서드를 덮어씀 print $this->name; print "님, 반갑습니다!<BR>"; } } $newuser = new Guest(); $newuser->print_hello();
게스트님, 반갑습니다!

Guest는 User의 자식. 같은 이름의 print_hello를 정의하면 부모의 것을 무시하고 자식의 것이 실행된다 — 오버라이딩.

용어 용어 정리
extends상속 키워드 — 부모 클래스 지정
상속부모의 멤버·메서드를 자식이 물려받음
수직 상속부모-자식 관계 (PHP 단일 상속)
오버라이딩자식이 같은 이름 메서드 재정의
parent::자식에서 부모 메서드 호출
단일 상속PHP/Java는 부모 1개만
vs traittrait는 수평 상속 (다중 가능)
final상속·오버라이딩 금지

1 왜 상속하나?
· 코드 재사용 — 부모의 기능을 그대로 활용
· 특수화 — 일부만 다르게 변형
· 다형성 — 같은 인터페이스로 다른 동작

2 오버라이딩 — 같은 이름의 메서드 재정의
class User { public function hello() { print "안녕"; } } class Guest extends User { public function hello() { print "반갑습니다"; } // 오버라이딩 } $g = new Guest(); $g->hello(); // "반갑습니다" — 자식 버전이 실행됨

객체의 실제 타입을 따라 메서드가 결정된다 (런타임 다형성).


3 parent:: — 부모 메서드 호출
class Guest extends User { public function hello() { parent::hello(); // 부모 버전 먼저 실행 print " (게스트)"; // 그 후 추가 동작 } }

 

반응형

 

4 PHP의 단일 상속
class C extends A, B { ... } // PHP에선 불가 class C extends A { use B; } // trait로 우회 (수평 상속)

PHP는 자바와 같이 부모 1개만 가능. 여러 기능이 필요하면 trait(수평 상속)을 사용 (다음 글 참고).


5 자주 하는 실수
· private 멤버는 자식에서 접근 불가 — protected를 써야 함
· 같은 이름 다른 시그니처 메서드 → 호환성 경고
· 부모 메서드를 부르고 싶은데 parent:: 모름
· 너무 깊은 상속 계층 → 유지보수 어려움 (3단 이내 권장)

핵심 한 줄 요약

extends부모 클래스를 상속받아 멤버·메서드 자동 사용
오버라이딩같은 이름 메서드를 자식에서 재정의
parent::자식에서 부모 메서드 호출
단일 상속PHP는 부모 1개만
private 주의자식에서 접근 X — protected 사용
final더 이상 상속·오버라이딩 금지
vs trait기능 묶음 공유는 trait (수평)
반응형

댓글