PHP - 클래스 상수: 초보자 가이드

안녕하세요, PHP 개발자 지망생 여러분! 오늘 우리는 PHP의 클래스 상수 세계로 뛰어들어 볼 거예요. 프로그래밍에 새로운 사람이라면 걱정하지 마세요; 저는 수년 동안 수많은 학생들에게 이 개념을 단계별로 가르쳐 왔기 때문에, 여러분도 쉽게 이해할 수 있을 것입니다. 그럼 커피(또는 차, 만약 그게 당신의 취향이라면)를 한 잔 마시고, 시작해 보세요!

PHP - Class Constants

클래스 상수는 무엇인가요?

본격적인 내용에 들어가기 전에, 클래스 상수가 무엇인지 이해해 보겠습니다. 집(당신의 PHP 클래스)을 짓는 데 필요한 고정된 측정치가 필요할 거예요. 예를 들어, 천장의 높이와 같은 고정된 값을 상상해 보세요. 이게 바로 PHP에서의 클래스 상수입니다 - 클래스와 관련된 고정된 값입니다.

클래스 상수를 사용하는 이유는 무엇인가요?

  1. 클래스 내에서 고정된 값을 정의하는 방법을 제공합니다.
  2. 마법 숫자나 문자보다 가독성과 유지보수성이 뛰어납니다.
  3. 클래스 인스턴스를 생성하지 않고도 접근할 수 있습니다.

이제 클래스 상수를 어떻게 생성하고 사용하는지 보겠습니다.

클래스 상수의 예

간단한 예를 시작해 보겠습니다. 원을 나타내는 클래스를 만들어 보겠습니다.

class Circle {
const PI = 3.14159;

private $radius;

public function __construct($radius) {
$this->radius = $radius;
}

public function calculateArea() {
return self::PI * $this->radius * $this->radius;
}
}

// 클래스 상수 사용
echo Circle::PI; // 출력: 3.14159

// 원을 생성하고 면적을 계산
$myCircle = new Circle(5);
echo $myCircle->calculateArea(); // 출력: 78.53975

이를 해부해 보겠습니다:

  1. 우리는 Circle 클래스 내에서 const 키워드를 사용하여 PI 상수를 정의합니다.
  2. 클래스 내에서는 self::PI를 사용하여 상수에 접근할 수 있습니다.
  3. 클래스 외에서는 Circle::PI를 사용하여 상수에 접근할 수 있습니다.
  4. calculateArea() 메서드는 이 상수를 사용하여 원의 면적을 계산합니다.

클래스 상수를 표현식으로 사용

PHP 5.6 이상에서는 상수 표현식을 사용하여 클래스 상수를 정의할 수 있습니다. 이는 수학 연산이나 다른 상수를 사용하여 새로운 상수를 정의할 수 있음을 의미합니다. 예를 보겠습니다:

class MathConstants {
const PI = 3.14159;
const TAU = self::PI * 2;
const HALF_PI = self::PI / 2;
}

echo MathConstants::TAU;    // 출력: 6.28318
echo MathConstants::HALF_PI; // 출력: 1.570795

이 예제에서 우리는 TAUHALF_PIPI의 값에 기반하여 정의하고 있습니다. 이는 상수가 서로 관련되어 있을 때 매우 유용합니다.

클래스 상수의 가시성修飾자

PHP 7.1부터는 클래스 상수에 가시성修飾자를 사용할 수 있습니다. 이를 통해 상수의 접근성을 제어할 수 있습니다. 예제를 보겠습니다:

class Seasons {
public const SPRING = 'Spring';
protected const SUMMER = 'Summer';
private const AUTUMN = 'Autumn';
const WINTER = 'Winter'; // 수정자 없음, 기본적으로 public

public function getSummer() {
return self::SUMMER;
}

private function getAutumn() {
return self::AUTUMN;
}
}

$seasons = new Seasons();

echo Seasons::SPRING; // 괜찮습니다, public입니다
echo Seasons::WINTER; // 괜찮습니다, 기본적으로 public
echo $seasons->getSummer(); // 괜찮습니다, public 메서드를 통해 protected 상수 접근
// echo Seasons::SUMMER; // 오류 발생, SUMMER는 protected입니다
// echo Seasons::AUTUMN; // 오류 발생, AUTUMN은 private입니다

가시성修飾자를 해부해 보겠습니다:

  1. public: 어디서든 접근할 수 있습니다.
  2. protected: 클래스 내와 자식 클래스 내에서만 접근할 수 있습니다.
  3. private: 클래스 내에서만 접근할 수 있습니다.

수정자가 지정되지 않으면 상수는 기본적으로 public입니다.

클래스 상수의 실용적인 사용 사례

이제 클래스 상수가 어떻게 작동하는지 이해했으므로, 실제 사용 사례를 몇 가지 살펴보겠습니다:

  1. 구성 설정:

    class DatabaseConfig {
    const HOST = 'localhost';
    const USERNAME = 'root';
    const PASSWORD = 'secretpassword';
    const DATABASE = 'myapp';
    }
  2. 오류 코드:

    class ErrorCodes {
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
    const UNAUTHORIZED = 401;
    }
  3. Enum-like 구조:

    class UserRoles {
    const ADMIN = 'admin';
    const EDITOR = 'editor';
    const SUBSCRIBER = 'subscriber';
    }

좋은 관행과 팁

  1. 대문자 사용: 상수를 이름을 정의할 때 대문자로 사용하는 것이 관례입니다.
  2. 과도한 사용 피하기: 상수는 유용하지만, 진정으로 고정된 값인 경우에만 사용하세요.
  3. 문서화: 상수의 목적이 명확하지 않다면 설명을 추가하는 것이 좋습니다.

결론

이제 여러분은 PHP 클래스 상수의 세계를 여행했습니다. 기본적인 사용에서 가시성修飾자까지, 클래스 상수를 효과적으로 사용할 수 있는 도구를 가지고 있습니다. 상수는 집의 기초와 같아서, 코드의 안정성과 일관성을 제공합니다.

PHP 여정을 계속하면서 더 재미있는 기능을 많이 탐험하게 될 것입니다. 하지만 지금은 클래스 상수를 마스터한 것을 축하드립니다. 계속 코딩하고, 배우고, 특히 즐기세요!

미래의 PHP 거장 여러분, 행복하게 코딩하세요! ??‍??‍?

메서드 설명
const CONSTANT_NAME = value; 클래스 상수 정의
ClassName::CONSTANT_NAME 클래스 외에서 클래스 상수 접근
self::CONSTANT_NAME 클래스 내에서 클래스 상수 접근
public const CONSTANT_NAME = value; public 클래스 상수 정의 (PHP 7.1+)
protected const CONSTANT_NAME = value; protected 클래스 상수 정의 (PHP 7.1+)
private const CONSTANT_NAME = value; private 클래스 상수 정의 (PHP 7.1+)

Credits: Image by storyset