코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

PHP Static Methods

PHP 정적 메서드(Static Methods): 클래스의 고정된 기능 제공


  • *PHP 정적 메서드(Static Methods)**는 객체를 생성하지 않고도 클래스에서 직접 호출할 수 있는 메서드입니다. 정적 메서드는 클래스의 공통적인 동작이나 객체에 종속되지 않는 기능을 구현할 때 유용합니다. 일반 메서드와 달리, 정적 메서드는 **클래스의 인스턴스(객체)**에 종속되지 않고, 클래스 자체에 속해 있습니다.

이 가이드에서는 PHP 정적 메서드의 개념, 정의 방법, 정적 속성과의 관계, 정적 메서드의 실용적인 예제주의 사항을 다룹니다.


1. PHP 정적 메서드의 개념

  • *정적 메서드(Static Method)**는 클래스의 인스턴스를 생성하지 않고, 클래스 이름으로 직접 호출할 수 있는 메서드입니다. 주로 상태를 유지할 필요가 없는 공통 기능을 구현할 때 사용됩니다. 정적 메서드는 객체와 관련된 데이터가 아닌, 클래스 자체와 관련된 동작을 정의하는 데 사용됩니다.

1.1 정적 메서드의 특징

  • 객체를 생성하지 않고 클래스 이름으로 직접 호출합니다.
  • self 키워드를 사용해 같은 클래스 내에서 다른 정적 메서드를 호출할 수 있습니다.
  • 객체와 무관한 기능을 정의하는 데 사용됩니다.
  • 클래스 속성 중 **정적 속성(static property)**만 접근할 수 있습니다.

2. PHP 정적 메서드 정의

정적 메서드는 static 키워드를 사용하여 정의합니다. 메서드를 호출할 때는 클래스명::메서드명의 형식으로 호출합니다.

2.1 정적 메서드 정의 및 사용 예제

<?php
class MathOperations {
    // 정적 메서드 정의
    public static function add($a, $b) {
        return $a + $b;
    }

    public static function subtract($a, $b) {
        return $a - $b;
    }
}

// 객체 생성 없이 클래스 이름으로 정적 메서드 호출
echo MathOperations::add(10, 5);  // 결과: 15
echo MathOperations::subtract(10, 5);  // 결과: 5
?>

설명:

  • static 키워드를 사용하여 정적 메서드를 정의합니다. MathOperations::add(10, 5)처럼 클래스 이름으로 메서드를 직접 호출할 수 있습니다.
  • 정적 메서드는 클래스의 인스턴스를 생성하지 않고도 사용할 수 있습니다.

3. 정적 속성과 정적 메서드

정적 메서드는 **정적 속성(static property)**을 함께 사용할 수 있습니다. 정적 속성클래스 전체에서 공유되며, 객체마다 개별적인 값을 가지지 않습니다. 정적 메서드는 정적 속성을 통해 클래스의 공통 상태를 관리할 수 있습니다.

3.1 정적 속성과 메서드 사용 예제

<?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
?>

설명:

  • self::$count: 클래스 내에서 정적 속성에 접근할 때는 self 키워드를 사용합니다.
  • Counter 클래스는 정적 메서드를 사용하여 카운트 값을 증가시키고, 정적 속성을 통해 이를 공유합니다.

4. 정적 메서드와 self 키워드

정적 메서드에서 같은 클래스의 다른 정적 메서드를 호출할 때는 self:: 키워드를 사용합니다. 이는 객체 메서드에서 **$this**를 사용하는 것과 유사하지만, 클래스 자체에 대한 참조를 나타냅니다.

4.1 self 키워드를 사용한 정적 메서드 호출

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

    public static function square($a) {
        // 같은 클래스의 다른 정적 메서드 호출
        return self::multiply($a, $a);
    }
}

echo MathOperations::square(4);  // 결과: 16
?>

설명:

  • self::multiply($a, $a): square() 메서드에서 multiply() 정적 메서드를 호출할 때 self:: 키워드를 사용합니다. 이는 클래스 내에서 정적 메서드를 호출하는 방식입니다.

5. 정적 메서드의 실용 예제

정적 메서드는 주로 유틸리티 기능을 구현할 때 사용됩니다. 데이터베이스 연결, 수학 연산, 파일 처리와 같은 객체와 관련 없는 기능을 구현할 때 적합합니다.

5.1 데이터베이스 연결 예제

<?php
class Database {
    private static $connection = null;

    // 데이터베이스 연결 메서드
    public static function connect() {
        if (self::$connection === null) {
            self::$connection = new mysqli("localhost", "user", "password", "database");
        }
        return self::$connection;
    }
}

// 데이터베이스 연결 호출
$db = Database::connect();

설명:

  • Database 클래스는 정적 메서드정적 속성을 사용하여 데이터베이스 연결을 관리합니다. 데이터베이스 연결은 클래스 전체에서 하나만 유지됩니다.
  • Database::connect()객체 생성 없이 데이터베이스 연결을 반환합니다.

6. 정적 메서드 사용 시 주의사항

6.1 정적 메서드와 객체 지향성의 관계

  • 정적 메서드는 객체 지향성을 제한할 수 있습니다. 정적 메서드는 객체 상태와 무관하기 때문에, 객체 지향의 핵심 개념인 **다형성(Polymorphism)**을 지원하지 못합니다.
  • 상속된 클래스에서 메서드 오버라이딩이 가능하지만, 동적 바인딩이 아닌 정적 바인딩을 사용합니다.

6.2 상속과 정적 메서드

정적 메서드는 상속할 수 있으며, **오버라이딩(Overriding)**도 가능합니다. 하지만, 동적 바인딩이 아닌 정적 바인딩을 따릅니다.

<?php
class Animal {
    public static function makeSound() {
        echo "Some generic sound<br>";
    }
}

class Dog extends Animal {
    public static function makeSound() {
        echo "Bark<br>";
    }
}

Animal::makeSound();  // 결과: Some generic sound
Dog::makeSound();     // 결과: Bark
?>

설명:

  • 정적 메서드는 상속할 수 있으며, Dog 클래스에서 Animal 클래스의 makeSound() 메서드를 오버라이딩하여 재정의할 수 있습니다.

7. 정적 메서드와 일반 메서드의 차이

특성 정적 메서드 일반 메서드
호출 방식 클래스 이름으로 호출 (Class::method) 객체를 생성하여 호출 ($object->method)
객체 상태 사용 여부 객체 상태를 사용하지 않음 객체 상태를 사용함
self vs this self로 클래스 내의 다른 정적 요소 호출 $this로 같은 클래스의 요소 호출
상속 및 오버라이딩 가능 여부 상속 가능, 오버라이딩 가능 (정적 바인딩) 상속 가능, 오버라이딩 가능 (동적 바인딩)

8. 정적 메서드의 장점과 단점

8.1 장점

  • 객체 생성 없이 호출 가능: 유틸리티 클래스나 공통 기능을 구현할 때 객체를 생성할 필요 없이 호출할 수 있어 효율적입니다.
  • 전역 상태 관리: 정적 메서드와 정적 속성을 통해 클래스 간의 전역 상태를 관리할 수 있습니다.

8.2 단점

  • 객체 지향성 제한: 정적 메서드는 객체의 상태와 관계없는 동작을 정의하므로, 객체 지향적 설계에 적합하지 않을 수 있습니다.
  • 다형성 미지원: 정적 메서드는 **다형성(Polymorphism)**을 지원하지 않으며, 동적 바인딩 대신 정적 바인딩을 사용합니다.

요약

PHP의 **정적 메서드(Static Methods)**는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있는 메서드로, 객체와 무관한 공통된 기능을 정의하는 데 사용됩니다. 정적 메서드는 유틸리티 클래스공통 기능을 제공하는 데 유용하며, 정적 속성과 함께 사용할 수 있습니다. 객체 지향성을 제한할 수 있지만, 적절히 사용하면 효율적인 설계가 가능합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com