💻 쇼핑몰 자동화 & 웹 개발 가이드

[PHP 입문] 변수 마스터 가이드: 스코프, 동적 변수까지

rhandy 2025. 4. 8. 07:10
728x90

처음 배우는 PHP, 변수 선언부터 정확히 알고 넘어가야 실력도 제대로 자랍니다!

안녕하세요! PHP를 막 시작했을 때 저도 가장 먼저 배운 게 변수였어요. 그런데 단순히 $name = "홍길동"만 알고 넘어가면 안 되더라고요. 타입 개념이 느슨한 PHP는 변수의 유연함이 강점이지만, 때로는 그게 문제로도 작용합니다. 변수의 스코프(scope), 전역/지역 변수, 슈퍼 글로벌 변수, 그리고 변수 변수(동적 변수)까지 제대로 알고 쓰면 오류도 줄고 코드도 훨씬 명확해져요.

이번 글에서는 PHP 변수의 모든 개념을 친절하고 구체적인 예제로 설명해드릴게요. 입문자든 복습을 원하는 분이든 모두에게 유익한 시간이 될 거예요!

PHP 변수 선언 방법과 규칙

PHP에서 변수는 $ 기호로 시작하며, 뒤에는 문자나 밑줄(_)로 시작하는 이름이 붙습니다. 숫자로 시작하면 에러가 발생하니 주의하세요. 변수 선언 전에 자료형을 지정할 필요는 없고, 대입과 동시에 생성됩니다.

$name = "홍길동";
$age = 25;
$is_active = true;
$_total = 100;

변수 이름은 대소문자를 구분하며, 예약어는 변수명으로 사용할 수 없습니다. 의미 있는 이름을 쓰는 게 가독성에 좋아요!

변수의 자료형과 자동 형변환

PHP는 동적 타이핑 언어입니다. 변수에 어떤 값이 들어가느냐에 따라 자동으로 자료형이 결정됩니다. gettype() 함수로 자료형을 확인할 수 있고, settype()으로 강제로 바꿀 수도 있어요.

자료형 예시 설명
string "hello" 문자열
integer 123 정수
double 3.14 부동소수점
boolean true, false 참/거짓
array [1, 2, 3] 배열
object new ClassName() 객체

변수의 유효 범위(Scope)

변수는 선언된 위치에 따라 사용할 수 있는 범위가 달라집니다. 이걸 스코프(scope)라고 해요. PHP에서는 주로 3가지 스코프를 기억하면 됩니다.

  • 전역(global): 함수 밖에서 선언된 변수
  • 지역(local): 함수 내부에서 선언된 변수
  • 정적(static): 함수 호출 간 값을 유지하고 싶은 경우 static 키워드 사용
$counter = 0; // 전역 변수

function countUp() {
  static $count = 0; // 정적 지역 변수
  $count++;
  echo $count;
}

전역 변수와 슈퍼글로벌 변수

함수 안에서 함수 밖의 전역 변수를 사용하려면 global 키워드나 $GLOBALS 배열을 이용해야 합니다. PHP에는 자체적으로 제공하는 전역 배열들도 있는데, 이를 슈퍼글로벌이라 부릅니다.

$name = "홍길동";

function greet() {
  global $name;
  echo "안녕하세요, $name 님!";
}

// 또는
function greet2() {
  echo "안녕하세요, " . $GLOBALS['name'] . " 님!";
}
  • $_GET, $_POST – 폼 데이터 수신
  • $_SESSION – 로그인 유지 정보
  • $_COOKIE – 브라우저 저장 정보
  • $_FILES – 파일 업로드 처리
  • $_SERVER – 서버 환경 변수
  • $_ENV, $_REQUEST 등도 존재

변수 변수(동적 변수) 사용법

PHP에서는 변수의 이름을 또 하나의 변수처럼 사용할 수 있습니다. 이를 동적 변수(variable variables)라고 해요. 상황에 따라 매우 유용하지만, 남용은 혼란을 줄 수 있으니 주의가 필요합니다.

$food = "pizza";
$pizza = "맛있다!";

echo $$food;  // 출력: 맛있다!
문법 설명
$$변수명 변수명이 담긴 변수의 값을 변수 이름처럼 사용
variable variables 배열이나 반복문에서 변수명을 유동적으로 설정 가능

변수 관리 팁과 주의사항

PHP 변수를 더 잘 다루기 위한 팁 몇 가지를 정리했습니다. 실전 개발에서 실수를 줄이고, 가독성을 높이는 데 도움됩니다.

  • 명확하고 의미 있는 변수명을 사용하세요 ($data보다는 $userName)
  • 불필요한 전역 변수 사용은 피하세요
  • 슈퍼글로벌은 항상 존재 여부를 isset()으로 확인
  • 배열은 반복문과 함께 사용하는 습관을 들이세요
  • 디버깅 시 var_dump()print_r()를 적극 활용
Q PHP 변수명 앞에 왜 항상 $를 붙이나요?

PHP는 변수와 상수를 구분하고, 코드를 파싱하기 위해 변수 앞에 항상 $ 기호를 붙입니다. 이 규칙은 PHP만의 고유한 문법입니다.

A PHP 문법상 변수 앞엔 항상 $를 붙이는 게 규칙이에요!
Q PHP는 변수 타입을 선언하지 않아도 되나요?

맞습니다. PHP는 동적 타이핑 언어라서 변수에 값을 대입하면 그에 따라 자동으로 자료형이 결정돼요.

단, PHP 7부터는 타입 힌트도 사용할 수 있습니다.

A 네! PHP는 값을 보고 타입을 자동으로 정해요.
Q 변수의 스코프는 왜 중요하죠?

변수의 유효 범위를 정확히 이해하지 못하면, 함수 안에서 선언한 변수가 바깥에 영향을 주지 않거나, 반대로 전역 변수가 의도치 않게 덮어쓰기 될 수 있어요.

A 예기치 않은 에러를 방지하려면 스코프 개념이 중요해요!
Q 변수 변수(동적 변수)는 꼭 필요한가요?

꼭 필요한 건 아니지만, 폼 데이터 처리나 반복적인 키 처리에 활용될 수 있습니다. 다만 가독성과 유지보수 측면에선 남용을 피하는 것이 좋아요.

A 특별한 상황이 아니라면 꼭 필요하지는 않아요!
Q 전역 변수와 슈퍼글로벌은 어떻게 다르죠?

전역 변수는 코드 내에서 선언된 범용 변수이고, 슈퍼글로벌은 PHP가 미리 정의한 전역 배열입니다. 모든 스코프에서 자동으로 접근 가능하다는 점이 차이예요.

A 슈퍼글로벌은 PHP가 기본 제공하는 전역 배열이에요!
Q 변수를 삭제하려면 어떻게 하나요?

unset($변수명)을 사용하면 메모리에서 해당 변수를 제거할 수 있어요. 주로 메모리 정리나 특정 조건 후 변수 초기화 시 사용합니다.

A unset() 함수를 사용하면 변수를 제거할 수 있어요!

 

처음 PHP를 배울 때 저는 변수는 그냥 $a = 1; 이렇게만 쓰면 되는 줄 알았어요. 그런데 프로젝트를 하다 보면 변수의 범위(Scope), 자료형, 전역/지역 변수 구분이 얼마나 중요한지를 절실히 느끼게 되더라고요. 특히 함수 안에서 전역 변수를 수정하려다가 값이 안 바뀌어 당황했던 기억이 나네요. 이번 글에서 소개한 내용을 이해하고 익혀두면, 실무에서 정말 많은 버그를 예방할 수 있습니다. 작고 단순해 보이는 변수지만, 결국 이게 모든 프로그램의 시작점이잖아요. 매번 변수를 다룰 때마다 “나는 지금 무슨 자료형을 쓰고 있고, 어디까지 유효한가?”를 생각해보는 습관을 들여보세요. 여러분의 코드가 훨씬 더 안정적이고 읽기 쉬워질 거예요!

728x90