PHP에서의 Late Static Binding(LSB) 이해
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
PHP 개발자, 특히 OOP(객체지향 프로그래밍) 및 팩토리 패턴, 재사용 가능한 컴포넌트 개발에 관심 있는 중급 이상 개발자
핵심 요약
self::
는 메서드가 정의된 클래스를,static::
는 런타임에 호출된 클래스를 참조함new static()
은 자식 클래스의 인스턴스를 생성하며,new self()
는 부모 클래스의 인스턴스만 생성함- LSB는 팩토리 패턴이나 재사용 가능한 컴포넌트 개발 시 유연성을 제공
static::class
는 런타임에 호출한 클래스를 동적으로 식별해 사용
섹션별 세부 요약
1. `self::`와 `static::`의 차이
self::
는 컴파일 타임에 정의된 클래스를 고정적으로 참조static::
는 런타임에 호출한 클래스를 동적으로 결정- 예시:
ChildClass::whoAmI()
는self::class
이면ParentClass
,static::class
이면ChildClass
출력
2. LSB의 적용 사례: 팩토리 패턴
Animal
클래스에서new static()
을 사용해 자식 클래스(Dog
,Cat
)의 인스턴스 생성Dog::create()
→Dog
인스턴스,Cat::create()
→Cat
인스턴스 생성new self()
사용 시 모든 경우Animal
인스턴스로 생성됨
3. WordPress 플러그인 개발 예시
BaseShortcode
클래스에서static::class
사용해GalleryShortcode
,FormShortcode
등 자식 클래스 식별new static()
을 통해 각 플러그인에 맞는 인스턴스 생성self::
사용 시 모든 경우BaseShortcode
로 동작하여 재사용성 저하
4. LSB 활용 팁
- 팩토리 패턴이나 서비스 로케이터 구현 시
static::
과new static()
사용 권장 UserController::load()
에서static::class
과new static()
을 사용해 "Creating UserController" 출력 가능
결론
static::
와new static()
은 런타임에 호출한 클래스를 동적으로 생성해 재사용성과 유연성을 극대화함- 팩토리 패턴, 플러그인 프레임워크, Laravel 스타일 팩토리 구현 시 LSB를 적용해 OOP 코드의 동적 처리 능력 향상
- 실무에서는
self::
대신static::
을 사용해 유연한 객체 생성 구현을 추천