본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP 함수 기본값 매개변수 — 로그인 분기 완전 정리

by 왕진 2026. 6. 13.
반응형

 

 

Web Development · PHP Default Args

PHP 기본값 매개변수 —
인수를 안 넘겨도 동작하는 함수

$username = "guest" 처럼 정의 단계에서 기본값을 미리 잡아두기
시작 오늘 분석할 코드

함수를 호출할 때 인수를 하나도 넘기지 않아도 정상 동작하는 코드다. 비결은 function check_member($username = "guest", $password = "guest") — 매개변수에 기본값을 미리 적어둔 것.

<?php check_member(); // 호출 — 인수 없이 호출 function check_member($username = "guest", $password = "guest"){ // 매개변수 기본값 — 외부에서 지정 안 하면 "guest" 사용 // 외부에서 check_member("admin", "1234") 식으로 호출 시 // 그 값으로 덮어써짐 if($username == "guest" && $password == "guest"){ print "게스트님 환영합니다!"; }else{ print "회원님 환영합니다!"; } } ?>
실제 출력 결과
게스트님 환영합니다!
용어 용어 정리
기본값 매개변수정의 시 = 으로 지정한 fallback 값
$username사용자 이름을 받는 매개변수
$password암호를 받는 매개변수
"guest"기본값 — 외부 미지정 시 사용
==두 값이 같은지 비교 (느슨한 비교)
&&AND — 두 조건 모두 참일 때만 참
if-else조건에 따라 두 갈래로 분기
로그인 분기방문자/회원에 따라 인사 메시지 달리

1 왜 기본값이 필요한가?

함수를 만들 때 "대부분의 경우는 이런 값일 것"이라는 추정이 가능한 매개변수가 있다. 매번 똑같은 값을 적어 넘기는 건 비효율적이다.

예시 시나리오
· 페이지네이션 함수 — 한 페이지 크기는 보통 10건
· 정렬 함수 — 기본 방향은 보통 오름차순
· HTTP 요청 함수 — 기본 메서드는 보통 GET
· 로그인 검증 함수 — 비로그인 상태는 보통 guest

이런 "당연한 기본값"을 함수 안에 묻어두면, 호출자는 특별한 경우만 인수를 넘기면 된다.


2 기본값 매개변수 문법
function check_member($username = "guest", $password = "guest") { // └────────────────┘ └────────────────┘ // 매개변수 = 기본값 매개변수 = 기본값

매개변수 이름 뒤에 =로 기본값을 적어주면 된다.

호출 방식 $username $password 결과
check_member() "guest" (기본) "guest" (기본) 게스트님 환영
check_member("kim") "kim" "guest" (기본) 회원님 환영
check_member("kim", "1234") "kim" "1234" 회원님 환영
check_member("guest", "1234") "guest" "1234" 회원님 환영
호출자는 왼쪽부터 순서대로 인수를 채울 수 있다. $password만 바꾸고 $username은 기본값으로 두려면 PHP 8.0+의 이름 있는 인수 문법이 필요하다 (8장 참고).

3 기본값이 가능한 매개변수 = 마지막에 와야 한다

가장 헷갈리는 규칙. 기본값이 있는 매개변수는 기본값 없는 것보다 뒤에 와야 한다.

올바른 순서
function f($a, $b = 10)
필수 → 선택 순서
호출: f(1) 또는 f(1, 2)
잘못된 순서
function f($a = 10, $b)
선택 → 필수 → 모순
호출: f(?, 2) 어떻게 표현?
※ 중간 매개변수만 생략하는 건 일반 호출 문법으로는 불가능. PHP 8.0의 이름 있는 인수(named arguments)로만 가능하다.

반응형
4 && — 두 조건이 모두 참이어야 함
if ($username == "guest" && $password == "guest") { … } // ─────── A ───────── ─────── B ────────── // // A 참 + B 참 → 전체 참 → 게스트 분기 // A 참 + B 거짓 → 전체 거짓 → 회원 분기 // A 거짓 → B 검사 안 하고 즉시 거짓 (단락 평가)
연산자 이름 의미
&& AND 둘 다 참이어야 참 로그인: 아이디 AND 암호 일치
|| OR 하나만 참이어도 참 관리자 OR 작성자만 수정 가능
! NOT 참 ↔ 거짓 뒤집기 !isset($x) = 정의 안 됨
※ 단락 평가 (short-circuit)
  • &&: 앞이 거짓이면 뒤는 검사 안 함
  • ||: 앞이 참이면 뒤는 검사 안 함
  • 이 특성을 이용해 $x && doSomething($x) 같이 안전 호출 가능

5 분기 흐름 단계별 추적
1
check_member() 호출인수 없음 → $username = "guest", $password = "guest" (기본값)
2
$username == "guest""guest" == "guest" → 참
3
&& $password == "guest""guest" == "guest" → 참 → 전체 참
4
if 블록 진입"게스트님 환영합니다!" 출력
5
함수 종료매개변수와 지역변수 모두 소멸

6 실무에서의 의미 — 로그인 분기

이 코드는 로그인 시스템의 가장 단순한 형태다. 사용자의 입력에 따라 두 가지 시나리오를 처리한다.

시나리오 A — 비로그인 방문자
세션에 사용자 정보 없음
check_member()로 호출
→ "게스트님 환영합니다!"
시나리오 B — 로그인 회원
세션의 ID/PW를 인수로
check_member($id, $pw)
→ "회원님 환영합니다!"
※ 실제 로그인은 이렇게 단순하지 않다. 암호는 해시(bcrypt 등)로 비교, DB에서 사용자 조회, 세션 발급, CSRF 방어, 무차별 대입 차단 등 많은 단계가 필요하다. 이 코드는 매개변수 기본값을 보여주기 위한 학습용.

7 자주 하는 실수
실수 증상 해결
기본값을 변수로 지정 구문 오류 (호출 시점에만 평가 가능) 기본값은 상수·리터럴만 가능
기본값 없는 매개변수가 뒤에 호출 모호성 → 사실상 에러 필수 → 선택 순서로 배치
== 대신 = 사용 비교가 아닌 대입 → 항상 참 비교는 == 또는 ===
and 사용 우선순위 차이로 의도 다른 결과 조건 결합은 &&를 권장
대소문자 구분 미인식 "Guest"와 "guest" 다르게 취급 strtolower()=== 신중하게

8 알아두면 좋은 — 이름 있는 인수 (PHP 8.0+)

매개변수 순서를 무시하고 이름으로 직접 지정해 호출할 수 있다.

function check_member($username = "guest", $password = "guest") { … } // PHP 8.0+ 이름 있는 인수 check_member(password: "1234"); // $username은 기본값 "guest", $password만 "1234" check_member(username: "kim", password: "5678"); check_member(password: "5678", username: "kim"); // 순서 무관
※ 이름 있는 인수의 장점
  • 가독성↑ — 호출 시점에 매개변수 이름이 바로 보임
  • 중간 매개변수만 변경 가능
  • 매개변수가 많은 함수의 호출에서 매우 유용

핵심 한 줄 요약

기본값 매개변수function f($x = "기본값") — 호출 시 생략 가능
호출 생략왼쪽부터 순서대로만 가능 (이름 있는 인수 없이)
배치 규칙기본값 없는 것 → 있는 것 순서
&&AND — 두 조건 모두 참일 때만 if 진입
단락 평가앞이 거짓이면 뒤는 보지 않음 (성능·안전성)
활용 예로그인 분기, 페이지네이션, HTTP 메서드 기본 등
PHP 8.0이름 있는 인수로 순서·중간 생략 자유로워짐
반응형

댓글