21.12.22

future_s·2021년 12월 22일

php

목록 보기
8/10

학습 내용

함수와 return에 대해 집중 학습했다. return 개념은 내가 계속 두루뭉술하게 알던 건데 오늘 드디어 실마리를 잡은 것 같다. 이 글을 반복해서 보자.

생활코딩 php 함수만들기~

함수

함수는 크게 2가지
1. php가 기본적으로 제공하는 함수, 내장 함수(예. scandir, str, len, count 등등)
2. 내가 직접 만든 함수 - 이름을 부여할 수 있다.

기능이 많아질수록 복잡함을 줄이기 위해 모든 걸 갈아넣게 된다. 그래서 어떤 언어를 배우든 그 언어의 핵심엔 함수가 있다.

function

약속된 문자 function이 오면 지금부터 함수를 만드는구나라고 생각한다.

function basic() {
  print(djWJrnwjWJWnr);
}
basic();
  1. basic이란 함수를 정의하면서 그 함수가 호출되면 중괄호 안의 코드가 오게 하고 싶구나라고 생각한다.
  2. 그리고 따옴표가 없는 문자();가 오면 함수를 실행시키려고 한다고 이해한다. 그래서 정의된 basic함수를 그때 실행하려고 한다.

-> 이렇게 하면 효율적이고 빠르게 사용할 수 있다.

<?php
function basic() {
  print(djWJrnwjWJWnr);
}
basic();
?>

<h2>parameter &amp; argument</h2>

<?php
function sum($left, $right) {
  print($left + $right);
}
sum(2,4);
?>

basic함수는 언제나 똑같이 작동하는 함수지만 sum은 입력값(정확한 명칭은 parameter)이 무엇이냐에 따라 다르게 동작하는 함수다.

★ return

php 함수의 형식 3강 return 링크
return 개념을 여러번 봐도 정확하게 못 알아먹었는데 오늘 설명으로 제대로 이해했다. 자주 다시 보자.

function sum($left, $right) {
  print($left + $right);
}

sum이란 함수는 두 값을 더하고, 출력하는 2가지 기능을 가짐
그런데 더한 결과를 화면에 출력하는 게 아니라 파일에 저장하고 싶다. 또는 이메일로 누군가에게 전송하고 싶을 수도 있음. 여러가지 하고 싶을 수 있는데 저렇게 2가지 기능을 한 번에 퉁쳐버리면 더한다는 기능이 제한적으로 되어버림..

함수를 만들 때 중요한 점

  • 하나의 함수엔 하나의 기능만 담는다.
sum2(2,4);

아직 만들진 않았지만 sum2 함수는 함수 자체적으로 결과를 출력해주는 print 기능이 없다. 대신에 얘를 실행하면 2+4는 6이 되는 표현식을 만들고 싶다. 그렇게 되면 이제 sum2(2,4);를 print로 감싸서 출력할 수도 있고 이메일을 보내든 섞든 볶든 할 수 있게 된다.

위에 적은 sum함수는 중괄호 안에 print가 있어서 출력한다는 기능이 내장돼있어서 별 쓸모가 적었는데 sum2는 아직 안만들었지만 내부적으로 그걸 동작한 결과를 return하기 때문에(그 값이 되기 때문에) 다양한 용도로 쓸 수 있게 된다.

이제 sum2 정의해본다.

function sum2($left, $right) {
  return $left + $right;
}

$left$right를 더한 결과를 'return한다'라고 하는 약속된 코드를 통해서 결과값을 return해줄 수 있게 된다.

아.. 이래서 커피컵이다..하는 얘기가 있었구나..

return이라는 코드가 나오면 뒤에 다른 코드가 있어도 return을 만나는 순간 함수는 종료돼버리기 때문에 밑의 코드는 무시된다.

함수에 인자(argument)를 전달하면 parameter가 함수 안에서만 사용되는 변수가 된다.

그렇게 최종적으로 작업한 결과를 return이란 키워드 뒤에 배치해주면 함수를 실행한 결과는 return 뒤에 있는 값(표현식)이 된다.

function sum2($left, $right) {
  return $left + $right;
}

지금 이 함수 자체는 statement로 값이 되지 않지만 호출한다면, 그리고 걔한테 return값이 있다면 걘 값이 되기 때문에 표현식인 것이다.

어렵고 복잡한 얘기이므로 예시 코드를 갖고서 자기자신에게 설명을 해보자. 그 과정에서 설명이 안되는 부분이 있다면 영상을 다시 봐라. 얼마 안되는 것 같지만 상당히 복잡한 개념이 많이 들어있어서 완벽하게 설명할 수 있을 때까지 반복하라.


함수의 형식을 배웠으니까 어제 제어문으로 거의 완성한 웹 애플리케이션에 함수를 도입해본다.

페이지 title에도 본문 제목과 같게 id가 있을 경우 id값을 출력하고 없을 경우 welcome을 출력하는 코드를 적고 싶다.

if(isset($_GET['id'])) {
  echo $_GET['id'];
} else {
  echo "Welcome";
}

근데 이걸 복사해서 붙여넣으면 너무 비효율적이다. 이럴때 함수를 쓴다.
-> 난 여기서 함수를 어디다 쓸지 몰랐음. 강사님은 아예 코드 제일 첫줄, 독타입 위에 함수를 작성함

<?php
function print_title() {
  if(isset($_GET['id'])) {
    // $_GET['id']값이 있다면(isset) 없다면 false
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php"></a>WEB</h1>
    중간 코드 생략
    <h2>
      <?php
      print_title();
     ?>
    </h2>

이처럼 동작은 같지만 코드를 효율적으로 줄일 수 있게 된다.

어제 만든 애플리케이션 코드를 전부 함수로 만들어줬다.

function print_title() {
  if(isset($_GET['id'])) {
    // $_GET['id']값이 있다면(isset) 없다면 false
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}

function print_description() {
  if(isset($_GET['id'])) {
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}

function print_list() {
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)) {
    if($list[$i] != '.'&&$list[$i] != '..') {
      echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
    }
    $i = $i + 1;
  }
}

이렇게 만든 후에 기존에 코드가 있던 부분은 함수 호출만 하는 방식으로 변경함

물론 함수는 훨씬 다면적이지만 함수를 바라보는 첫번째 시각은 일종의 정리정돈을 위한 수납상자라고 생각하자.

어려운 내용

  1. 궁금증 : return을 안 쓰고 그냥
function sum2($left, $right) {
  $left + $right;
}

이렇게만 써도 함수에 저장되는 게 아닌가? 그리고 걍 쓰면 되는 거 아님...? 이런건 문법상 금지됐고 활용하려면 무조건 return을 쓰자고 약속이 돼있는 건가?

  1. 몰랐던 점
    함수를 정확히 어디다 적는지 모르는.. 충격적인 상황..
    어제,그저께 만든 애플리케이션 제어문을 전부 함수로 변경하는 과정에서 생긴 일이다.

해결 방법

  1. 이건 내일 선배들한테 물어봐야겠다.
  2. 강의를 들으며 새로 배웠다.

느낀 점

오늘은 강의가 너무 재밌었다. 사실 맨날 피곤해서 힘들었는데 오늘은 강의가 재밌어서 시간 가는 줄도 모르고 배웠다.

함수를 js로 한 번은 배운 상태였지만 그래도 여전히 모르는 게 많았다. 그걸 알아가는 재미가 있었다. 특히 예전부터 return 개념이 정확하게 와닿지가 않아 고생했다가 오늘 드디어 실마리를 잡은 것 같다. 강사님 말대로 나에게 계속 설명하면서 머리에 넣어야겠다.

profile
미래는 현재의 내가 만들어간다

0개의 댓글