2025. 8. 7. 18:14ㆍ프로그램/PHP 중급
📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 03 정적 속성/메서드 (static)

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

#정적_속성은 #클래스에_속한_데이터이며, 특정 객체(#인스턴스)에 속한 데이터가 아닙니다. 모든 객체가 공유하는 공통된 데이터를 저장할 때 유용하게 사용됩니다.
주요 특징:
- static 키워드: 속성 선언 시 static 키워드를 사용합니다.
- :: 연산자: $ 대신 # :: 연산자를 사용하여 접근합니다.
- self 키워드: 클래스 내부에서 정적 속성에 접근할 때는 self::를 사용합니다.
- 클래스 단위: 정적 속성은 클래스 단위로 딱 하나만 존재하며, 모든 인스턴스가 동일한 값을 공유합니다.
사용 예제:
<?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
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
'프로그램 > PHP 중급' 카테고리의 다른 글
| 📚 PHP 중급 - 7주차: MVC 패턴의 이해 및 적용- 01 MVC (Model-View-Controller) 개념 (0) | 2025.08.09 |
|---|---|
| 📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 04 싱글톤(Singleton), 팩토리(Factory) 패턴 소개 (0) | 2025.08.08 |
| 📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 02 트레이트 (Trait) (0) | 2025.08.06 |
| 📚 PHP 중급 - 6주차: OOP 심화 및 디자인 패턴 소개 - 01 추상 클래스, 인터페이스 (0) | 2025.08.04 |
| 📚 PHP 중급 - 5주차: PHP 객체 지향 프로그래밍 (OOP) 기초 - 04 상속 (extends) (0) | 2025.08.01 |