본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP return — 함수 결과 돌려주기 + strlen 바이트 검사 완전 정리

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

 

 

Web Development · PHP return

PHP return —
함수가 결과를 호출자에게 돌려주는 방법

strlen으로 바이트 검사 + return true/false로 OK·오류 분기
시작 오늘 분석할 코드

문자열의 길이가 정해진 한도 안에 있는지 검사하는 코드다. 함수가 true 또는 falsereturn으로 돌려주고, 호출자는 그 결과로 OK·오류 메시지를 분기 출력한다.

<?php $str = "abcdefghijklemnop"; $byte = 16; $flag = checkByte($str, $byte); // 함수의 반환값이 $flag에 저장됨 if($flag){ print "OK입니다."; }else{ print "오류입니다."; print $byte; print "Byte를 초과하였습니다."; } function checkByte($str, $byte){ $strlen = strlen($str); if($strlen <= $byte){ return true; } return false; } ?>
실제 출력 결과
오류입니다.16Byte를 초과하였습니다.
※ 위 결과를 보면 의외다 — "abcdefghijklemnop"는 16글자라 16Byte일 것 같지만 실제로는 17글자(l 다음에 e가 두 번 들어감 — 오타). strlen("abcdefghijklemnop") = 17, 17 ≤ 16은 거짓이라 false 반환.
용어 용어 정리
return함수 결과를 호출자에게 돌려주고 즉시 종료
strlen()문자열의 바이트 길이를 반환하는 내장 함수
true / false참·거짓을 나타내는 불리언 값
$flag검사 결과를 담는 불리언 변수
매개변수함수가 외부에서 받는 값을 담는 변수
반환값함수가 호출자에게 돌려주는 값
if(불리언)조건이 true이면 진입, false면 else로
바이트(Byte)컴퓨터가 글자를 다루는 최소 단위 (영문=1B)

1 return은 왜 필요한가?

지금까지 본 함수들은 안에서 직접 print로 출력만 했다. 하지만 종종 함수가 한 일의 결과값을 호출자에게 넘겨, 호출자가 그 값을 가지고 더 처리하는 게 필요하다.

return 없는 함수
함수 안에서 출력까지 끝
결과를 다시 쓸 수 없음
용도: 화면 출력 전용
return 있는 함수
결과를 호출자에게 넘김
받은 쪽이 분기·계산에 활용
용도: 검증·계산·변환

2 return의 두 가지 효과

return두 가지 일을 동시에 한다.

return true; // (1) "true"라는 값을 호출자에게 전달 // (2) 함수 실행을 즉시 종료 (그 아래 코드 실행 안 됨)

이 코드의 checkByte를 보자.

function checkByte($str, $byte) { $strlen = strlen($str); if ($strlen <= $byte) { return true; ← (1) 호출자에게 true 줌 (2) 함수 종료 } return false; ← 위에서 return 안 했으면 여기로 와서 false 반환 }
"return을 만나는 즉시 함수 끝"이라는 점이 중요하다. 그래서 if 안에 return true가 있으면 return false그 외의 경우에만 실행된다 → if-else 없이도 분기 효과.

3 strlen() — 문자열 바이트 길이
strlen("abc") // 3 strlen("abcdefghij") // 10 strlen("abcdefghijklemnop") // 17 (16글자 같지만 17!)
입력 strlen 결과 설명
"hello" 5 영문 1글자 = 1바이트
"한글" 6 (UTF-8 기준) 한글 1글자 = 3바이트
"a한" 4 영문 1 + 한글 3 = 4바이트
"" (빈 문자열) 0  
strlen"바이트 단위"로 센다. 한글 글자 수를 세려면 mb_strlen($str, "UTF-8")을 써야 한다. 글자 수와 바이트 수는 다르다.

반응형
4 반환값을 변수에 받기
$flag = checkByte($str, $byte); // ↑ ↑ // 여기에 들어감 함수가 return으로 돌려준 값

호출 자리(checkByte(...)) 자체가 결과 값으로 치환된다고 생각하면 쉽다.

// 호출 시점에 함수가 false를 return 했다면 $flag = checkByte($str, $byte); ↓ 평가됨 $flag = false;
반환값을 변수에 안 받고 바로 if 조건에 쓸 수도 있다 → if (checkByte($str, $byte)) { ... }. 단, 결과를 두 번 이상 쓸 거면 변수에 담아두는 게 효율적이다.

5 if($flag) — 불리언 직접 검사

$flag가 이미 true·false이므로 비교 연산이 필요 없다.

간결 (이 코드)
if ($flag) { ... }
$flag가 true면 진입
가장 자연스러움
불필요한 비교
if ($flag == true) { ... }
같은 결과지만 장황
초보자가 자주 하는 표현
※ PHP의 "참" 판정
  • true / 0이 아닌 숫자 / 빈 문자열이 아닌 문자열 / 비어있지 않은 배열 → 참
  • false / 0 / "" / "0" / null / 빈 배열 → 거짓
  • 주의: 문자열 "0"은 거짓 (PHP의 함정)

6 실행 흐름 단계별 추적
1
$str = "abcdefghijklemnop"17글자 문자열 저장
2
$byte = 16한도 16바이트 설정
3
checkByte($str, $byte) 호출매개변수로 두 값을 함수 안으로 복사
4
$strlen = strlen($str) → 17문자열 바이트 길이 측정
5
17 <= 16 → 거짓if 통과하지 않음 → return true 안 함
6
return false함수 종료, false를 호출자에게 반환
7
$flag = false호출 위치에 false가 채워짐
8
if($flag) → false → else 진입"오류입니다.16Byte를 초과하였습니다." 출력

7 "guard clause" 패턴 — 일찍 return하기

이 코드의 함수는 사실 guard clause(이른 종료)를 활용한 깔끔한 형태다.

if-else로 두 줄
if (조건) {
  return true;
} else {
  return false;
}
guard 패턴 (이 코드)
if (조건) {
  return true;
}
return false;

같은 동작, 더 평평함

심지어 더 간결하게는 비교 결과 자체를 그대로 return할 수 있다.

function checkByte($str, $byte) { return strlen($str) <= $byte; // 비교 결과(true/false)를 그대로 반환 }

8 자주 하는 실수
실수 증상 해결
return을 빼먹음 호출자에 null이 전달됨 모든 분기에 return 보장
return 뒤에 코드 작성 실행 안 됨 (도달 불가능) return은 함수의 마지막 동작
strlen으로 한글 글자 수 실제 글자 수의 3배 결과 한글: mb_strlen($s, "UTF-8")
if ($flag == true) 장황 (틀리진 않음) 그냥 if ($flag)
화면 출력하면서도 결과를 쓰려 함 출력 + 분기 둘 다 안 됨 출력은 호출자가, 결과는 return으로

9 한 단계 발전 — 한국어/영문 혼용 검증

실제 사이트에서 닉네임·게시글 길이를 검사할 때는 한글도 1글자로 세야 한다.

function checkByte($str, $maxBytes) { return strlen($str) <= $maxBytes; // 바이트 기준 } function checkLen($str, $maxChars) { return mb_strlen($str, "UTF-8") <= $maxChars; // 글자 기준 }

핵심 한 줄 요약

return결과를 호출자에 돌려주고 함수 즉시 종료
두 가지 효과값 전달 + 실행 종료
$flag = 함수()반환값을 변수에 받아 두 번 이상 사용
strlen문자열 바이트 길이 (한글은 글자 수와 다름)
if($flag)불리언 직접 검사 — == true는 불필요
guard 패턴조건 만족 시 일찍 return → 코드 평평해짐
한글 검증바이트 수는 strlen, 글자 수는 mb_strlen
반응형

댓글