정의 및 사용 방법
PHP에서 정적 변수(static variable)는 함수 내부에서 선언되는 로컬 변수이지만, 함수 호출이 끝나도 값이 유지되는 변수입니다.
특징
- 함수 내에서 선언한 로컬 변수입니다.
- 변수명 앞에
static
과 함께 사용해 선언해야 합니다. 예를 들어static $var = foo;
와 같이 선언합니다. - 정적 변수는 선언한 함수 안에서만 접근 가능하며, 이전 호출의 값을 기억합니다.
- 정적 변수는 처음 함수가 호출될 때만 초기화되며, 이후 호출에서는 기존 값을 그대로 사용합니다.
- 일반 로컬 변수는 함수 호출이 끝나면 사라진다는 점에서 정적 변수와는 큰 차이가 있습니다.
기본 예제
function countCalls() {
// static 키워드를 사용하여 정적 변수 $count를 선언합니다.
// 이 변수는 함수 호출이 끝나도 값이 유지됩니다.
static $count = 0; // static 변수는 처음 호출될 때만 초기화됩니다.
// 현재 호출 횟수를 출력합니다.
echo $count . "\n";
// 함수가 호출될 때마다 $count의 값을 1씩 증가시킵니다.
$count++;
// 다음 호출 때에도 $count의 값이 유지되므로,
// 이전 호출에서 증가한 값이 그대로 사용됩니다.
}
countCalls(); // 출력: 0
countCalls(); // 출력: 1
countCalls(); // 출력: 2
// 함수 외부에서는 정적 변수 $count에 접근할 수 없습니다.
echo $count; // Warning: Undefined variable $count
정적 변수의 필요성을 보여주는 예제
function countCalls() {
// 일반 로컬 변수 $count를 선언합니다.
// 이 변수는 함수 호출이 끝나면 사라집니다.
$count = 0;
// 현재 호출 횟수를 출력합니다.
echo $count;
// 함수가 호출될 때마다 $count의 값을 1씩 증가시킵니다.
$count++;
// 호출이 끝나면 $count는 사라지므로,
// 증가된 값은 다음 호출에서 유지되지 않습니다.
}
countCalls(); // 출력: 0
countCalls(); // 출력: 0
countCalls(); // 출력: 0
위 예제처럼 일반 로컬 변수는 함수 호출이 끝나면 값이 사라지기 때문에, 함수 내부에서 값을 누적하거나 호출 횟수를 기록할 수 없습니다.
따라서 이전 호출에서 증가한 값이 유지되도록 하려면 static
키워드를 사용한 정적 변수를 사용하세요.
활용 예제
정적 변수는 함수 내부에서만 접근 가능하면서, 일반 로컬 번수와는 달리 함수 호출이 끝나도 값이 유지되는 변수입니다. 이 특징 덕분에, 함수의 상태를 기억하거나 한 번만 실행되어야 하는 코드를 구현할 때 매우 유용합니다.
다음 예제들을 통해서 정적 변수가 실제로 어떻게 사용되는지 확인해 보겠습니다.
페이지 뷰 카운트
function pageView() {
static $views = 0; // 처음 호출 시만 초기화, 이후 호출에서도 값 유지
$views++;
echo "페이지 뷰: $views";
}
pageView(); // 페이지 뷰: 1
pageView(); // 페이지 뷰: 2
pageView(); // 페이지 뷰: 3
함수를 한 번만 실행하도록 제어
function init_database() {
// static 변수를 사용하여 초기화 여부를 기억합니다.
static $is_initialized = false;
// 이미 초기화되었다면 함수 종료
if ($is_initialized) {
return;
}
echo "데이터베이스 연결을 초기화합니다.";
// 실제 데이터베이스 연결 코드는 여기 위치
// 초기화 완료 표시
$is_initialized = true;
}
// 여러 번 호출해도 초기화 메시지는 한 번만 출력됩니다.
init_database();
init_database();
init_database();