Menu
Coddy logo textTech

정적 메서드와 프로퍼티

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

프로퍼티가 정적(static)일 수 있는 것과 마찬가지로, 메서드 또한 개별 객체가 아닌 클래스 자체에 속할 수 있습니다. 정적 메서드는 인스턴스를 먼저 생성할 필요 없이 클래스에서 직접 호출됩니다.

static 키워드를 사용하여 정적 메서드를 선언하고, 클래스 이름과 :: 연산자를 사용하여 이를 호출합니다:

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
    
    public static function multiply($a, $b) {
        return $a * $b;
    }
}

echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);

출력:

8
8

정적 메서드는 정적 속성과 함께 잘 작동합니다. 일반적인 패턴은 정적 메서드를 사용하여 공유 클래스 데이터를 관리하는 것입니다.

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
Counter::increment();
echo Counter::getCount();

출력:

2

정적 메서드는 객체 인스턴스가 없기 때문에 $this를 사용할 수 없다는 점에 유의하세요. 정적 메서드는 self::를 사용하여 정적 속성과 다른 정적 메서드에만 접근할 수 있습니다.

핵심 포인트: 정적 메서드는 객체 상태가 필요하지 않은 유틸리티 함수나 클래스 수준의 데이터를 관리하는 데 유용합니다. 정적 메서드는 객체 인스턴스화 없이도 기능을 제공합니다.

challenge icon

챌린지

쉬움

객체를 인스턴스화할 필요 없이 정적 메서드와 속성을 사용하여 고유 식별자를 생성하는 ID 생성기 시스템을 만들어 보겠습니다.

코드를 구성하기 위해 두 개의 파일을 생성합니다:

  • IdGenerator.php — 정적 멤버만을 사용하여 고유 ID 생성을 관리하는 IdGenerator 클래스를 정의합니다. 이 클래스는 0으로 시작하는 private 정적 속성 $lastId"ID"로 설정된 private 정적 속성 $prefix를 가져야 합니다. 마지막 ID를 증가시키고 접두사와 새 ID를 결합한 형식의 문자열(예: "ID1", "ID2" 등)을 반환하는 정적 메서드 generate()를 만듭니다. 접두사를 변경하는 정적 메서드 setPrefix($newPrefix)$lastId의 현재 값을 반환하는 정적 메서드 getLastId()를 추가합니다.
  • main.php — IdGenerator 클래스 파일을 포함합니다. 기본 접두사를 사용하여 두 개의 ID를 생성하고 각각 한 줄씩 출력합니다. 그런 다음 정적 메서드를 사용하여 접두사를 "USER"로 변경하고, 두 개의 ID를 더 생성하여 각각 출력합니다. 마지막으로 적절한 정적 메서드를 호출하여 마지막 ID 번호를 출력합니다.

정적 메서드는 ClassName::methodName()을 사용하여 클래스에서 직접 호출되며, 클래스 내부에서는 self::$propertyName을 사용하여 정적 속성에 접근한다는 점을 기억하세요. 객체 인스턴스가 없으므로 정적 메서드 내에서 $this를 사용할 수 없습니다.

출력 결과는 서로 다른 접두사를 가진 ID의 진행 과정을 보여주어야 하며, 이를 통해 정적 속성이 여러 메서드 호출 간에 어떻게 값을 유지하는지 확인할 수 있습니다.

치트 시트

정적 메서드는 클래스 자체에 속하며 인스턴스를 생성하지 않고 호출됩니다. static 키워드를 사용하여 선언하고 클래스 이름과 :: 연산자를 사용하여 호출합니다:

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
}

echo MathHelper::add(5, 3); // 8

정적 메서드는 self::를 사용하여 정적 속성에 접근할 수 있습니다:

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
echo Counter::getCount(); // 1

정적 메서드는 객체 인스턴스가 없기 때문에 $this를 사용할 수 없습니다. self::를 사용하여 정적 속성과 다른 정적 메서드에만 접근할 수 있습니다.

정적 메서드는 객체 상태가 필요하지 않은 유틸리티 함수나 객체 인스턴스화 없이 클래스 수준의 데이터를 관리하는 데 유용합니다.

직접 해보기

<?php

// IdGenerator 클래스 파일을 포함합니다
require_once 'IdGenerator.php';

// TODO: 기본 접두사를 사용하여 두 개의 ID를 생성하고 각각을 별도의 줄에 출력합니다

// TODO: 정적 메서드를 사용하여 접두사를 "USER"로 변경합니다

// TODO: 두 개의 ID를 더 생성하고 각각을 별도의 줄에 출력합니다

// TODO: 적절한 정적 메서드를 사용하여 마지막 ID 번호를 출력합니다

?>
quiz icon실력 점검

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

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