Menu
Coddy logo textTech

인스턴스 속성 vs 정적 속성

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 15번째.

class에서 property를 만들 때, 각 개별 객체에 속하는지 아니면 class 자체에 속하는지 결정해야 합니다. 이러한 구분이 instance properties와 static properties의 차이입니다.

인스턴스 properties가 기본값입니다. 각 객체는 property의 자체 복사본을 가지며, 한 객체에서 이를 변경해도 다른 객체에는 영향을 주지 않습니다.

<?php
class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo $alice->name . "\n";
echo $bob->name . "\n";

출력:

Alice
Bob

정적 속성은 특정 객체가 아니라 class에 속합니다. static 키워드로 선언하고, ->를 사용하는 객체 대신 ::와 함께 class 이름을 사용하여 액세스합니다.

<?php
class User {
    public static $count = 0;
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
        self::$count++;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo User::$count;

출력:

2

$count가 모든 인스턴스에서 공유된다는 점에 주목하세요. 새로운 User를 만들 때마다 동일한 $count 변수가 증가합니다. 클래스 내부에서는 정적 속성을 참조하기 위해 self::$count를 사용합니다.

핵심 사항: 각 객체가 자체 값을 필요로 할 때는 instance properties를 사용하세요. 인스턴스 수를 계산하거나 구성을 저장하는 것처럼 class의 모든 객체 간에 데이터를 공유해야 할 때는 static properties를 사용하세요.

challenge icon

챌린지

쉬움

각 방문자에게 고유한 인스턴스 속성과 모든 방문자 간에 공유되는 static 속성의 차이를 보여 주는 방문자 추적 시스템을 만들어 보겠습니다.

코드를 정리하기 위해 두 개의 파일을 만들 것입니다.

  • Visitor.php: 개별 방문자를 추적하고 전체 방문자 수를 계속 집계하는 Visitor class를 Define하세요. 각 방문자는 자신만의 $name property(인스턴스 속성)를 가져야 하며, $totalVisitors property는 모든 instance에서 공유되어야 합니다(static 속성). constructor는 이름을 Accepts하고, 이름을 Sets한 다음, total 방문자 수를 Increments합니다. getInfo() method를 추가하여 "[name] is visitor #[totalVisitors]"를 returns하도록 하세요.
  • main.php: Visitor class 파일을 Include한 다음, "Alice", "Bob", "Charlie"라는 names를 가진 세 명의 방문자를 해당 order대로 Create하세요. 세 명을 모두 생성한 후, 각 방문자에 대해 getInfo()를 호출한 result를 Print하세요(각 result는 own line에 표시). 그런 다음 Visitor::$totalVisitors를 사용하여 class에서 직접 static property에 액세스해 total 방문자 수를 Print하세요.

class 내부에서는 self::$propertyName을 사용하여 static properties에 액세스하고, class 외부에서는 ClassName::$propertyName을 사용한다는 점을 Remember하세요. Instance properties에는 평소처럼 $this->propertyName으로 액세스합니다.

출력에는 각 방문자와 할당된 번호가 표시되고, 마지막 line에는 최종 total count가 표시되어야 합니다.

직접 해보기

<?php
// Visitor 클래스를 포함합니다
require_once 'Visitor.php';

// TODO: "Alice", "Bob", "Charlie" 이름을 가진 방문자 세 명을 생성하세요 (그 순서로)

// TODO: 각 방문자의 getInfo() 결과를 출력하세요 (각각 별도의 줄에)

// TODO: Visitor::$totalVisitors를 사용하여 총 방문자 수를 출력하세요
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러