📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 03 정적 속성/메서드 (static)

2025. 8. 7. 18:14프로그램/PHP 중급

📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 03 정적 속성/메서드 (static)

지난 시간에는 #코드_재사용성을 높이는 강력한 도구인 #트레이트(Trait)에 대해 알아보았습니다. 이번 시간에는 #클래스의_인스턴스_생성_없이도_접근 가능한 #정적_속성(#static_property)과 #정적_메서드(#static_method)에 대해 깊이 있게 다뤄보겠습니다.


정적 속성 (Static Properties)

#정적_속성은 #클래스에_속한_데이터이며, 특정 객체(#인스턴스)에 속한 데이터가 아닙니다. 모든 객체가 공유하는 공통된 데이터를 저장할 때 유용하게 사용됩니다.

주요 특징:

  • static 키워드: 속성 선언 시 static 키워드를 사용합니다.
  • :: 연산자: $ 대신 # :: 연산자를 사용하여 접근합니다.
  • self 키워드: 클래스 내부에서 정적 속성에 접근할 때는 self::를 사용합니다.
  • 클래스 단위: 정적 속성은 클래스 단위로 딱 하나만 존재하며, 모든 인스턴스가 동일한 값을 공유합니다.

사용 예제:

PHP
 
<?php
class User {
    // 정적 속성: 모든 인스턴스가 공유하는 회원 수
    public static $userCount = 0;

    public function __construct() {
        // 생성될 때마다 정적 속성 값을 증가
        self::$userCount++;
    }
}

$user1 = new User();
$user2 = new User();
$user3 = new User();

// 클래스 이름을 통해 정적 속성 값에 접근
echo "현재 회원 수: " . User::$userCount. PHP_EOL; // 결과: 현재 회원 수: 3
?>

이 예제에서 $userCount는 각 User 객체에 개별적으로 속한 변수가 아니라, User 클래스 자체에 속한 공통 변수입니다.


정적 메서드 (Static Methods)

#정적_메서드는 #클래스_인스턴스_없이_호출할_수_있는_메서드입니다. 주로 객체에 의존하지 않는 유틸리티 함수나 클래스 전반에 걸쳐 공통적으로 사용되는 작업을 수행할 때 사용됩니다.

주요 특징:

  • static 키워드: 메서드 선언 시 static 키워드를 사용합니다.
  • :: 연산자: -> 대신 # :: 연산자를 사용하여 호출합니다.
  • self와 static 키워드:
    • 클래스 내부에서 정적 메서드에 접근할 때는 self::를 사용합니다.
    • 클래스 상속 시 런타임에 호출된 클래스의 정적 속성이나 메서드에 접근하려면 static::을 사용합니다. 이를 #Late_Static_Binding이라고 합니다.
  • $this 사용 불가: 정적 메서드 내에서는 특정 인스턴스를 가리키는 $this를 사용할 수 없습니다.

사용 예제:

PHP
 
<?php
class MathHelper {
    public static $pi = 3.14159;

    // 인스턴스 없이 호출 가능한 정적 메서드
    public static function getCircleArea($radius) {
        // 클래스 내부에서 정적 속성 접근 시 self:: 사용
        return self::$pi * ($radius * $radius);
    }
}

// 클래스 이름을 통해 정적 메서드 직접 호출
$area = MathHelper::getCircleArea(5);

echo "반지름이 5인 원의 넓이: " . $area. PHP_EOL; // 결과: 반지름이 5인 원의 넓이: 78.53975
?>

이처럼 MathHelper 클래스는 인스턴스를 만들 필요 없이 MathHelper::getCircleArea()를 통해 원의 넓이를 계산하는 기능을 제공합니다.


정적 속성/메서드의 활용 사례

  • 팩토리 메서드(Factory Method): 객체 생성을 담당하는 메서드를 정적으로 만들어 인스턴스 생성 과정을 캡슐화할 때 사용합니다.
  • 유틸리티 클래스(Utility Class): 인스턴스에 의존하지 않는 수학, 파일 처리, 문자열 조작 등의 공통 기능을 모아놓은 클래스에 정적 메서드를 사용합니다.
  • 싱글톤 패턴(Singleton Pattern): 클래스의 인스턴스를 하나만 생성하도록 제한하는 디자인 패턴에서 정적 속성과 메서드가 필수적으로 사용됩니다.

정적 멤버는 편리하지만, #과도한_사용은_객체_지향_설계를_훼손할_수_있습니다. 정적 멤버는 상태를 공유하므로 #전역_변수와_유사해져_테스트가_어려워지고_의존성을_높일_수_있습니다. 따라서 정말 인스턴스와 무관한 공통 기능이나 데이터에만 사용하는 것이 좋습니다.

 

 

고품질 착한가격 통신사IP 고정IP 안전한VPN 초고속VPN / 게임,광고,우회용

https://xn--299ao67b9qbmsf04c.net/

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com