PHP Late Static Binding(LSB) 이해 및 활용법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

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::classnew static()을 사용해 "Creating UserController" 출력 가능

결론

  • static::new static()은 런타임에 호출한 클래스를 동적으로 생성해 재사용성과 유연성을 극대화함
  • 팩토리 패턴, 플러그인 프레임워크, Laravel 스타일 팩토리 구현 시 LSB를 적용해 OOP 코드의 동적 처리 능력 향상
  • 실무에서는 self:: 대신 static::을 사용해 유연한 객체 생성 구현을 추천