PHP 상수의 이해
PHP에서 상수를 선언하고 사용하는 방법과 알아야 할 개념정리 및 사용 예제에 대해 살펴보겠습니다. 그리고 상수를 선언하는 방식인
define()
함수와 const
키워드의 차이점에 대해서도 알아봅니다. 또한, 배열을 상수로 선언하는 상수 배열에 대해서도 알아보겠습니다.
PHP 상수
PHP 상수의 개념
PHP에서 상수(Constant)는 한 번 정의된 후에 값이 변경되지 않는 단순 값의 식별자(이름)입니다. 즉, 한 번 값을 할당하면 이후에는 재할당이 불가능합니다. 상수는 프로그램 실행 동안 고정된 값을 유지하며, 여러 부분에서 사용되는 공통적인 값을 표현하는 데에 사용됩니다.
PHP 상수의 선언
define()
함수를 사용하여 선언하거나,- 클래스 내에서
const
키워드를 사용하여 선언할 수 있습니다.
상수는 보통 대문자로 작성된 이름을 갖고 있으며, 필요에 따라 단어 사이를 언더스코어(_
)로 구분합니다. 상수는 일반적으로 변경하지 않아야 할 설정 값이나 역할, 상태 코드 등에 사용됩니다.
PHP상수는 슈퍼글로벌 변수와 마찬가지로 전역 범위(전역 스코프, Global Scope)에서 사용할 수 있습니다.
상수의 중요성과 활용 예제
상수는 한 번 선언되면 값이 변경되지 않기 때문에 프로그램에서 변하지 않아야 하는 값을 나타내는 데에 중요한 역할을 합니다. 이러한 값을 상수로 정의함으로써 여러 가지 장점을 얻을 수 있습니다.
- 코드의 가독성과 유지보수성 향상
- 일관성과 안정성 유지
- 버그와 오류 방지
코드의 가독성과 유지보수성 향상
상수를 사용하면 하드코딩보다 더 명확하고 의미 있는 코드를 작성할 수 있습니다. 예를 들어, 다음과 같이 상수를 사용하여 의미를 부여한 상태 코드를 정의할 수 있습니다.
이렇게 상수로 정의된 상태 코드를 사용하면 코드의 가독성이 높아지고 유지보수가 쉬워집니다.
일관성과 안정성 유지
상수는 변경할 수 없는 값을 나타내므로, 의도치 않은 변경을 방지하고 안정성을 유지하는 데에 도움이 됩니다. 프로그램의 여러 부분에서 같은 값을 사용해야 할 경우, 상수를 활용하면 한 번 정의된 값을 일관성 있게 사용할 수 있습니다.
위의 상수를 사용하여 로그인 시도 횟수를 제한하는데, 이후에 이 값이 변경되지 않도록 하면서 일관성을 유지할 수 있습니다.
버그와 오류 방지
상수는 값이 변경되지 않기 때문에 실수로 값을 잘못 변경하는 버그를 방지할 수 있습니다. 예를 들어, 프로그램에서 고정된 숫자 값을 사용하는 경우, 값이 변경되는 것을 막지 않으면 값의 오류가 발생할 수 있습니다. 하지만 상수를 사용하면 이러한 오류를 방지할 수 있습니다.
이러한 이점들은 상수의 중요성을 강조하고, 프로그램의 안정성과 가독성을 향상시키는 데에 큰 도움이 됩니다. 상수를 적절히 활용하여 코드의 유지보수성과 품질을 높일 수 있습니다.
상수와 변수의 차이점
상수와 변수의 가장 큰 차이점은 값을 변경할 수 있는지 여부입니다.
변수는 언제든지 재할당하여 값을 변경할 수 있지만, 상수는 한 번 값이 할당되면 변경할 수 없습니다. 이로 인해 상수는 불변성을 갖고, 변경할 수 없어야 하는 값들을 표현하는 데에 적합합니다.
상수의 장점과 활용성에 대한 간략한 소개
- 상수는 프로그램에서 변하지 않아야 하는 값들을 나타내기에 유용합니다.
- 값의 변경을 막아 의도하지 않은 버그를 줄일 수 있습니다.
- 대문자로 작성하여 상수의 이름을 구분함으로써 가독성을 높일 수 있습니다.
- PHP 버전에 따라 동작하는 방식이 조금 다를 수 있으므로, PHP 버전을 고려하여 상수를 사용해야 합니다.
이 섹션에서 PHP 상수의 개념과 중요성에 대해 설명하고, 상수와 변수의 차이점을 비교해봄으로써 상수의 활용성을 간략하게 소개했습니다. 다음 섹션에서는 상수 선언과 사용법에 대해 더 자세히 알아보겠습니다.
PHP 상수 선언과 사용법
상수를 선언하는 방법에는 define()
함수와 const
키워드를 사용하는 두 가지 방법이 있습니다. 이 섹션에서는 각 방법에 대해 자세히 살펴보고, 또한 상수의 유효 범위에 대해 알아보겠습니다.
define()
함수를 사용한 상수 선언 방법
define()
함수를 사용하여 전역 상수를 선언할 수 있습니다. 이 방법은 PHP 4 이상에서 사용 가능합니다.
구문
매개변수
$constant_name |
상수에 사용할 이름입니다. 문자열 형식입니다. |
---|---|
$value |
상수의 값입니다. PHP 5에서는 값은 스칼라 값(정수, 실수, 문자열, 부울, null )이어야 합니다. PHP 7에서는 배열 값도 허용됩니다. |
$case_insensitive |
상수의 이름이 대소문자 구분 여부를 나타냅니다. true 로 설정하면 상수가 대소문자 구분 없이 정의됩니다. 기본 동작은 대소문자 구분입니다. 즉, CONSTANT와 Constant는 서로 다른 값을 나타냅니다. 경고: PHP 7.3.0부터 deprecated(폐기)되었습니다. PHP 8.0.0부터는 false 만 허용되는 값이며, true 를 전달하면 경고가 발생합니다. |
반환 값
성공 시 true
, 실패 시 false
를 반환합니다.
예시 사용법
위의 예제에서 MY_CONSTANT
는 전역 범위에서 접근 가능한 상수로, 어디서든지 접근할 수 있습니다.
const
키워드를 사용한 상수 선언 방법
const
키워드를 사용하여 클래스 내부에서 상수를 선언할 수 있습니다. 이 방법은 PHP 5 이상에서 사용 가능합니다.
위의 예제에서 MY_CONSTANT
는 MyClass
클래스 내부에서만 접근 가능한 상수입니다. 클래스 내부에서는 self::CONSTANT_NAME
형식으로 접근할 수 있고, 클래스 외부에서는 클래스 이름과 ::
연산자를 사용해서 접근할 수 있습니다.
PHP 상수의 유효 범위
define() |
define() 함수로 선언된 상수는 전역 범위에서 접근 가능합니다. 즉, 어디서든지 접근할 수 있습니다. |
---|---|
const |
const 키워드로 클래스 내부에서 선언된 상수는 해당 클래스 내에서만 접근 가능합니다. 클래스 내부에서는 self::CONSTANT_NAME 형식으로 접근할 수 있고, 클래스 외부에서는 클래스 이름과 :: 연산자를 사용해서 접근할 수 있습니다. 클래스 외부에서 직접 접근하려면 경고(warning)가 발생합니다. |
PHP 상수의 유효 범위 예제
위 예제에서 define()
함수로 선언한 GLOBAL_CONSTANT
는 전역 범위에서 접근 가능합니다. 따라서 클래스 내부에서도 접근할 수 있습니다. 클래스 AnotherClass
에서 getConstantValue()
메서드를 호출하여 전역 상수를 출력하는 예제를 보여주었습니다.
위 예제에서 const
키워드로 선언한 CLASS_CONSTANT
는 클래스 외부에서 접근하려면 경고(warning)가 발생합니다.
define()
함수와 const
키워드의 차이점 비교
비교 항목 | define() 함수 |
const 키워드 |
---|---|---|
선언 | 전역 범위에서 선언 | 클래스 내부에서 선언 |
접근 방식 | 전역 범위에서 접근 가능함. 즉, 어디서든지 접근할 수 있음. | 클래스 내에서만 접근 가능. 클래스 내부에서는 self::CONSTANT_NAME 형식으로 접근할 수 있고, 클래스 외부에서는 클래스 이름과 :: 연산자를 사용해서 접근할 수 있음. 클래스 외부에서 직접 접근하려면 경고(warning)가 발생함. |
상수 이름 대소문자 구분 | 기본적으로 구분함, 설정으로 대소문자 구분 없이 선언 가능. PHP 8.0.0 버전 이후 대소문자를 구분함. | 구분함. |
처리 시기 | 런타임(실행 타임)에 동적으로 호출되어 상수의 존재 여부를 확인함(상수의 존재 여부를 확인하는 데 사용할 수 있음) | 컴파일 타임(코드가 실행되기 전)에 사용되어 상수를 정의함(상수를 정의할 때 사용되며, 컴파일 타임에 상수가 이미 정의되어 있어 상수의 존재 여부를 확인하는 데 사용할 수 없음) |
PHP 버전 | PHP 4 이상 | PHP 5 이상 |
PHP 상수 배열
PHP 7 버전 이후에는 define()
함수를 이용한 상수의 선언에서 상수의 값에 배열 값도 허용했습니다.
PHP 7 버전 이전에는 상수의 값은 스칼라 값(정수, 실수, 문자열, 부울, null)이어야 했습니다. 이는 개발자에게 좀 더 유연한 상수의 사용을 사용함으로써 개발의 편의성을 제공하기 위해서입니다. 예제를 통해 살펴보겠습니다.
상수로 선언된 배열은 읽기 전용
위 예제처럼 상수로 선언된 배열의 요소를 변경하려고 하면 오류가 발생하는 것을 확인할 수 있습니다. 배열은 요소를 변경할 수 있으나 상수의 값으로 사용된 배열은 읽기 전용입니다. 이는 "PHP에서 상수(Constant)는 한 번 정의된 후에 값이 변경되지 않는 단순 값"이라는 일관성을 유지하기 위한 것입니다. 즉 상수는 변경되지 않아야 하기 때문입니다.
주의하세요!
PHP 7 이전 버전과 PHP 7 이후 버전 모두에서 const
키워드로는 배열을 상수 값으로 선언할 수 없습니다. const
키워드는 스칼라(Scalar) 값만을 상수 값으로 허용하며, 배열이나 객체와 같은 복합 데이터 유형을 사용할 수 없습니다.