본문 바로가기
Infra & Security Eng/Programming

[PHP] - 함수의 정의, 구조, 예시, 소수 판별의 원리, 실습 코드 분석해보기

by 엔지니어 E 2026. 3. 19.
반응형

PHP 사용자 정의 함수

1. 함수의 정의
사용자 정의 함수: PHP에서 기본으로 제공하는 기능 외에, 사용자가 직접 이름을 붙이고 기능을 설계하여 만드는 함수 
특징: 한번 만들어 두면 필요할때마다 이름만 불러서 반복해서 사용 가능 

2. 함수의 구조와 예시
function: 컴퓨터에 이제부터 새로운 기능을 하나 만들겠다라고 선언하는 명령어
===============================
function sayHello($name) 
{
  $message = "안녕하세요, " . $name . "님!";
  return $message;
}
===============================

function sayHello($name) - 인사라는 이름의 함수를 만든다
{
  $message = "안녕하세요, " . $name . "님!"; - 실행문: 전달받은 이름을 넣어 문장을 만든다
  return $message; - 만들어진 문장을 함수 밖으로 보낸다
}
echo sayHello("은쯔"); - 함수 호출: 이름을 넣어 실행하고 결과를 출력

결과 출력 
===============================
안녕하세요, 은쯔님!
===============================

<?php
// [2번] 호출을 받고 여기로 점프! ($name에 "은별"이 저장됨)
function sayHello($name) 
{
  // [3번] $name에 들어있는 "은별"을 꺼내서 문장을 만들고 $message에 넣음
  $message = "안녕하세요, " . $name . "님!"; 

  // [4번] 완성된 $message 값을 들고 다시 호출했던 곳(8번 줄)으로 돌아감
  return $message; 
}

// [1번] 여기서 시작! "은별"이라는 값을 들고 sayHello 함수를 부름
// [5번] 함수가 가져온 결과물을 echo가 받아서 화면에 보여줌
echo sayHello("은별"); 
?>

 

pri0.php 실습 코드 해설

소수와 합성수를 구별해보는 프로그램 

<?php
// 사용자가 '확인' 버튼을 눌러서 숫자를 컴퓨터에게 보냈을 때만 아래 내용이 실행됨
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    // [1번] 사용자가 칸에 적은 숫자를 가져와서 $n이라는 이름의 저장 공간에 넣음
    $n = $_POST['num'];

    // [2번] 숫자가 1보다 작거나 같은지 확인함 (0, 1 등)
    if ($n <= 1) {
        // [3번] 0이나 1은 소수나 합성수 규칙에 해당하지 않으므로 그대로 출력하고 끝냄
        echo "<p>{$n}은(는) 소수도 아니고 합성수도 아닙니다.</p>";
    } 
    else {
        // [4번] 일단 이 숫자가 소수라고 가정하고 '참(true)' 상태를 저장해둠.
        $isPrime = true;

        // [5번] 숫자를 2부터 시작해서 (해당 숫자 - 1)까지 1씩 늘려가며 계속 나누어 봄
        // 예: 7을 입력했다면 2, 3, 4, 5, 6으로 각각 나누기를 시도함
        for ($i = 2; $i < $n; $i++) {
            
            // [6번] 만약 나누었을 때 나머지가 0이라면? (딱 나누어떨어진다면)
            if ($n % $i == 0) {
                // [7번] 자기 자신 말고 다른 숫자로 나누어졌으니 소수가 아니다. '거짓(false)'으로 바뀐다
                $isPrime = false;
                // [8번] 이미 소수가 아님을 알았으니 더 이상 다른 숫자로 나누어 볼 필요가 없어 멈춘다
                break;
            }
        }

        // [9번] 위 반복 과정이 끝난 후, 여전히 $isPrime이 '참'인지 '거짓'인지 확인함
        if ($isPrime) {
            // [10번] 끝까지 나누어떨어지는 숫자가 없었다면 소수라고 출력함
            echo "<p>{$n}은(는) 소수입니다.</p>";
        } else {
            // [11번] 중간에 한 번이라도 나누어떨어졌다면 합성수라고 출력함
        }
    }
}
?>

 

fun01.php 실습 코드 해설

사용자로부터 숫자(n)를 입력받아, 1부터 그 숫자까지의 모든 정수를 더한 합계(sum)를 구하는 프로그램을 작성하는 실습

<?php
  // 1. 앞 페이지(HTML)에서 입력한 'limit' 값을 가져와 $limit 변수에 저장한다
  $limit = $_GET['limit']; 

  // 2. 1부터 특정 숫자까지 더하는 규칙(함수)을 정의한다. $n은 전달받을 숫자가 들어갈 자리이다
  function get_sum($n) 
  {
      // 3. 합계를 누적할 변수 $sum을 만들고 0으로 초기화한다
      $sum = 0; 
      
      // 4. 숫자 $i를 1부터 시작하여 $n이 될 때까지 1씩 증가시키며 반복한다 *1부터 그 숫자까지의 모든 정수이므로 $i=1부터 시작함
      for ($i = 1; $i <= $n; $i++) { - *  $i <= $n;인 이유는 만약 1부터 10까지의 숫자를 더하는데 $i < $n; 이거라면 $i <10 이라면 $i가 9일 때는 참이라서 9를 더한다. 그 다음 $i가 10이 되면 10 < 10 이되어 거짓(false)가 된다. 10은 더 하지 못하고 9까지만 더한 채 반복분이 끝나게 된다 
          // 5. 현재 합계($sum)에 반복 중인 숫자($i)를 더하여 다시 $sum에 저장한다
          $sum += $i; 
      }
      
      // 6. 모든 반복이 끝나면 최종 합계가 담긴 $sum을 함수 밖으로 돌려준다
      return $sum; 
  }

  // 7. 입력받은 $limit이 계산 가능한 '숫자' 형태인지 확인한다
  if (is_numeric($limit)) { 
      // 8. 함수를 실행하여 얻은 결과값을 $result 변수에 담는다
      $result = get_sum($limit); 
      
      // 9. 결과 문장을 출력한다. {}를 사용하면 변수 안의 숫자가 문장 속에 바로 들어간다
      echo("1에서 {$limit}까지의 합은 {$result}입니다."); 
  } else {
      // 10. 숫자가 아닌 값이 들어왔을 때 출력할 안내 문구이다
      echo "숫자를 입력해주세요."; 
  }

  echo "<hr>";
  // 11. 현재 작성된 이 파일의 전체 코드를 화면에 그대로 보여준다
  show_source(__FILE__);
?>

 
참고사항

[알고리즘] 소수 판별의 원리 

1. 핵심 개념 
소수: 1과 자기 자신만으로 나누어떨어지는 수 (예: 7)
합성수: 1과 자기 자신 외의 수로도 나누어떨어지는 수 (예: 25)

2. 판별 알고리즘 (Trial Division)
2부터 1씩 증가시키며 N을 나누었을 때, 처음으로 나누어떨어지는 수가 자기 자신이면 소수이다

3. 예시
7 (소수): 2, 3, 4, 5, 6으로 나누었을 때 나머지가 생기다가, 최종적으로 7에서만 나누어떨어짐 → 소수
25 (합성수): 2, 3, 4로 안 나누어지다가, 자기 자신인 25에 도달하기 전인 5에서 나누어떨어짐 → 합성수

4. 한 줄 요약
2부터 순차적으로 나누어 보며, 나누어떨어진 값이 자기 자신(N)과 일치하는지 확인하는 것이 소수 판별의 기본 알고리즘