PHP - 정적 속성

안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 PHP의 정적 속성이라는 흥미로운 세계로 뛰어들어 보겠습니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 여러분을 안내하기 위해 내가 수년간 교실에서 사용한 같은 인내심으로 안내해 드릴게요. 시작해 보겠습니다!

PHP - Static Properties

정적 속성이란?

코드로 돌입하기 전에 먼저 정적 속성이 무엇인지 이해해 보겠습니다. 여러분이 내 교실과 같은 교실에 있고, 모두가 볼 수 있고 쓸 수 있는 화이트보드가 있다고 상상해 보세요. 정적 속성은 그 화이트보드와 같습니다 - 이는 특정 학생(또는 프로그래밍에서의 객체)에 속한 것이 아니라 클래스 자신에 속한 것입니다.

정적 속성의 주요 특징:

  1. 클래스의 모든 인스턴스 간에 공유됩니다.
  2. 클래스의 인스턴스를 생성하지 않고도 접근할 수 있습니다.
  3. static 키워드를 사용하여 선언됩니다.

이제 실제로 어떻게 작동하는지 보겠습니다!

정적 속성의 예제

정적 속성을 데모하기 위해 간단한 Counter 클래스를 생성해 보겠습니다:

class Counter {
public static $count = 0;

public function increment() {
self::$count++;
}

public static function getCount() {
return self::$count;
}
}

이를 해부해 보겠습니다:

  1. 정적 속성 $count를 선언하고 0으로 초기화합니다.
  2. increment() 메서드는 카운트를 1 증가시킵니다.
  3. getCount() 메서드는 현재 카운트를 반환합니다.

이제 이 클래스를 사용해 보겠습니다:

echo Counter::$count; // 출력: 0

$counter1 = new Counter();
$counter1->increment();
echo Counter::$count; // 출력: 1

$counter2 = new Counter();
$counter2->increment();
echo Counter::$count; // 출력: 2

echo Counter::getCount(); // 출력: 2

이게 멋질 수 없죠? Counter 객체를 몇 개 생성하든, 모두가 같은 $count를 공유합니다. 마치 내 교실의 모든 학생들이 하나의 화이트보드 카운터를 공유하는 것과 같은 이야기입니다!

"self" 키워드

여러분이 self::$count를 사용했다는 것을 발견했을 수도 있습니다. self 키워드는 "이 클래스"라고 말하는 것과 같습니다 - 현재 클래스를 가리킵니다. 이는 특히 정적 속성과 메서드와 함께 사용할 때 매우 유용합니다.

Counter 클래스를 확장하여 self의 더 많은 사용 사례를 보겠습니다:

class Counter {
public static $count = 0;
private static $secretCount = 100;

public function increment() {
self::$count++;
self::incrementSecretCount();
}

private static function incrementSecretCount() {
self::$secretCount++;
}

public static function getSecretCount() {
return self::$secretCount;
}
}

여기서 우리는 $secretCount라는 비밀 속성을 추가했습니다. 우리는 self를 사용하여 클래스 내부에서 정적 속성과 메서드에 접근합니다.

"parent" 키워드

이제 상속과 parent 키워드에 대해 이야기해 보겠습니다. 상상해 보세요, 부모님한테 요리를 배우고 있는 중입니다. 부모님의 레시피(상속된 메서드)를 사용하지만, 자신만의 독특한 변화를 더합니다. PHP에서 parent 키워드는 부모 클래스의 메서드와 속성에 접근할 수 있게 해줍니다.

Counter 클래스를 확장한 SuperCounter를 생성해 보겠습니다:

class SuperCounter extends Counter {
public function superIncrement() {
parent::increment();
parent::increment();
self::$count++; // 여전히 상속된 정적 속성을 위해 self를 사용할 수 있습니다
}
}

새로운 SuperCounter를 사용해 보겠습니다:

$superCounter = new SuperCounter();
$superCounter->superIncrement();
echo SuperCounter::$count; // 출력: 3

superIncrement() 메서드는 부모의 increment()을 두 번 호출하고, 그 다음에 한 번 더 증가시키므로, 총 증가량은 3이 됩니다.

정적 메서드 표

이제 우리가 본 정적 관련 메서드를 편리한 표로 요약해 보겠습니다:

메서드 설명
self::$property 같은 클래스 내에서 정적 속성에 접근
self::method() 같은 클래스 내에서 정적 메서드 호출
ClassName::$property 클래스 외부에서 정적 속성에 접근
ClassName::method() 클래스 외부에서 정적 메서드 호출
parent::method() 자식 클래스에서 부모 클래스의 메서드 호출

결론

이제 여러분은 PHP의 정적 속성에 대해 탐구했고, 기본 사용에서 상속까지 이르렀습니다. 정적 속성은 교실의 화이트보드와 같아요 - 모두가 공유하고 접근할 수 있습니다.

프로그래밍에서의 도구와 마찬가지로, 정적 속성을 지혜롭게 사용하세요. 카운터, 구성 설정, 또는 클래스의 모든 인스턴스 간에 공유되어야 하는 데이터에 매우 유용합니다. 하지만 과도하게 사용하면 코드가 관리되기 어려워지고 테스트하기 어려워질 수 있습니다.

계속 연습하고, 곧 정적 속성을 마스터할 거예요! 그리고 기억하세요, 프로그래밍에서도 교실에서처럼, 어리석은 질문은 없습니다 - 오직 배울 기회뿐입니다. 행복한 코딩을 기원합니다!

Credits: Image by storyset