Menu
Coddy logo textTech

클래스 내 상수

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

때때로 클래스 내에서 절대 변경되지 않아야 하는 값이 필요할 때가 있습니다. 클래스 상수(Class constants)는 모든 인스턴스에서 동일하게 유지되며 선언 후에는 수정할 수 없는 고정된 값을 정의하는 방법을 제공합니다.

클래스 내부에서 const 키워드를 사용하여 상수를 정의합니다. 관례적으로 상수 이름은 대문자로 작성합니다:

<?php
class Circle {
    const PI = 3.14159;
    
    public $radius;
    
    public function __construct($radius) {
        $this->radius = $radius;
    }
    
    public function area() {
        return self::PI * $this->radius * $this->radius;
    }
}

$circle = new Circle(5);
echo $circle->area();

출력:

78.53975

정적 속성과 마찬가지로, 상수는 개별 객체가 아닌 클래스에 속합니다. 클래스 내부에서는 self::CONSTANT_NAME을 사용하여 접근하고, 외부에서는 ClassName::CONSTANT_NAME을 사용하여 접근합니다:

<?php
class HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;

출력:

200
404

핵심 포인트: 정적 속성(static properties)과 달리, 상수(constants)는 한 번 정의되면 변경할 수 없습니다. 상수는 설정 값, 상태 코드 또는 수학적 상수와 같이 애플리케이션 전체에서 고정된 상태로 유지되어야 하는 값에 이상적입니다.

challenge icon

챌린지

쉬움

절대로 변하지 않는 고정된 변환 값을 저장하기 위해 클래스 상수를 사용하는 온도 변환 유틸리티를 만들어 보겠습니다.

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

  • Temperature.php — 온도 변환을 처리하는 Temperature 클래스를 정의합니다. 이 클래스는 세 개의 상수를 가져야 합니다: 0으로 설정된 FREEZING_POINT_C, 100으로 설정된 BOILING_POINT_C, 그리고 1.8로 설정된 CONVERSION_FACTOR (섭씨에서 화씨로의 변환에 사용됨)입니다. public $celsius 속성과 섭씨 값을 받아 설정하는 생성자를 포함하세요. (celsius * CONVERSION_FACTOR) + 32 공식을 사용하여 저장된 섭씨 온도를 화씨로 변환하는 toFahrenheit() 메서드를 추가하세요. 또한 온도가 어는점 상수와 같으면 "Freezing"을, 끓는점 상수와 같으면 "Boiling"을, 그렇지 않으면 "Normal"을 반환하는 getStatus() 메서드를 추가하세요.
  • main.php — Temperature 클래스 파일을 포함합니다. 0, 100, 25 값을 가진 세 개의 Temperature 객체를 생성합니다. 각 온도에 대해 화씨 변환 값과 상태를 "[fahrenheit]F - [status]" 형식으로 같은 줄에 출력하세요. 각 온도는 개별 줄에 출력되어야 합니다. 세 개를 모두 출력한 후, 클래스에서 직접 BOILING_POINT_C 상수에 접근하여(Temperature::BOILING_POINT_C 사용) 새 줄에 출력하세요.

상수는 클래스 내부에서는 self::CONSTANT_NAME을 사용하여 접근하고, 외부에서는 ClassName::CONSTANT_NAME을 사용하여 접근한다는 점을 기억하세요. 속성과 달리 상수는 접근할 때 $ 기호를 사용하지 않습니다.

치트 시트

클래스 상수는 절대 변하지 않는 고정된 값이며 클래스의 모든 인스턴스에서 공유됩니다. const 키워드를 사용하여 정의합니다:

<?php
class Circle {
    const PI = 3.14159;
    
    public function area($radius) {
        return self::PI * $radius * $radius;
    }
}

클래스 내부에서는 self::CONSTANT_NAME을 사용하여 상수에 접근합니다:

return self::PI * $radius * $radius;

클래스 외부에서는 ClassName::CONSTANT_NAME을 사용하여 상수에 접근합니다:

echo Circle::PI;

정적 속성(static properties)과의 주요 차이점:

  • 상수는 선언 후에는 변경할 수 없습니다.
  • 상수는 $ 기호를 사용하지 않습니다.
  • 상수는 설정 값, 상태 코드 또는 수학적 상수와 같은 고정된 값에 적합합니다.

관례적으로 상수 이름은 대문자로 작성합니다:

<?php
class HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

echo HttpStatus::OK;  // 200

직접 해보기

<?php

require_once 'Temperature.php';

// TODO: 0, 100, 25의 값을 가진 세 개의 Temperature 객체를 생성합니다.

// TODO: 각 온도에 대해 "[fahrenheit]F - [status]" 형식으로 출력합니다.
// 각 온도는 개별 줄에 출력되어야 합니다.

// TODO: 클래스에서 직접 BOILING_POINT_C 상수에 접근하여 출력합니다.
// ClassName::CONSTANT_NAME 구문을 사용하세요.

?>
quiz icon실력 점검

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

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