PHP5 객체모델 – 08.클래스 상수

상수

상수(constant)라는 것은 프로그램에서 한번 값이 결정되면 다시는 새로운 값으로 변경될 수 없는 객체입니다. 언어마다 상수의 분류가 다소 다르기는 합니다만 대체적으로 숫자형, 문자형, 문자열 상수로 구분되며 자바에서는 부울린형이 추가되어 있습니다. 참고로 자바에서는 상수를 리터럴(literal)이라고 부릅니다.

대분류 소분류 사용예
숫자형 정수 1, 100, 2005, 0777, 0xFF, …
실수 1.2, 100.0, 3.1415927, …
지수 0.12e-2, 10e45, 0.36E-3, …
문자형 영문자 소문자 ‘a’ – ‘z’, 대문자 ‘A’ – ‘Z’
숫자형문자 ‘1’  – ‘ 9’
특수문자 ‘#’, ‘$’, ‘?’, newline과 같은 escope code, …
부울린형 예약어 true, false
문자열형 “Hello world.”, …

< 상수의 분류 >

상수를 변수처럼 사용하는 방법

각 언어마다 상수를 변수처럼 이름을 가진 상수로 사용할 수 있도록 해줍니다. 이 방법은 언어마다, 그리고 상수가 정의된 위치에 따라 다를 수 있기 때문에 각 언어별(PHP, C++, 자바)로 상수이름을 어떻게 정의하여 사용할 수 있는지 살펴보겠습니다.

PHP에서는 5.0부터 클래스에서 정의되는 상수를 제공합니다. 이 상수를 클래스 상수(class constant)라고 하며 기존의 전역 영역에서 사용하던 전역 상수(global constant)와 구별하여 사용할 수 있습니다.

PHP에서 전역상수를 정의하기 위해서는 define 함수를 이용합니다.

C++에서는 아래와 같은 방법으로 상수의 이름을 사용하도록 해줍니다.

위와 같은 C++에서의 방법은 PHP의 define() 함수에 의한 방법과는 그 구현방법이 다릅니다. C++에서의 #define은 프리프로세서(preprocessor)로 매크로 기능을 이용하는 방법으로 컴파일하기 전에 상수이름이 해당 상수로 모두 대치됩니다.

PHP의 define() 함수에 의해 정의된 상수는 하나의 기억장소에 저장되나 그 값이 변수처럼 새로운 값으로 치환되지 못하도록 합니다.

아래와 같이 C++에서의 또 다른 상수이름을 지정할 수 있는 방법인 const 키워드를 이용하는 방법이 있으며 이 방법의 의해 정의된 상수이름은 PHP의 define() 함수에 의해 정의된 함수처럼 하나의 기억장소를 할당받으며 그 값을 변경할 수 없습니다.

PHP5에서 제공되는 클래스 상수가 위와 유사하게 const 키워드를 이용하여 정의합니다.

PHP에서는 float와 같은 자료형을 지정하지 않는다는 것을 감안하면 C++ 표현 방식과 같다는 것을 알 수 있습니다.

참고로 자바에서는 #define, const 대신에 final 키워드를 사용하여 상수(리터럴) 이름을 지정할 수 있습니다.

클래스 상수

클래스 상수는 클래스 단위로 설정할 수 있는 상수로 아래와 같이 const 키워드를 사용하여 클래스 상수를 정의하며 전역 상수와 마찬가지로 변수를 나타내는 $ 문자를 붙이지 않습니다.

const 클래스상수명 = ‘상수값’;

클래스 상수는 클래스 안에서 사용되는 키워드 $this뿐만 아니라 생성된 인스턴스를 가지고는 접근할 수 없습니다. 따라서 클래스 상수를 사용하기 위해서는 아래와 같이 self, parent 키워드 또는 클래스명을 통해 접근해야 합니다.

클래스 상수는 항상 public 가시범위(visibility)를 가지고 있기 때문에 const 키워드 앞에는 public 접근 제한자를 포함하여 어떠한 접근제한자도 지정해서는 안됩니다.

답글 남기기