반갑 습니다 . 오늘 도 여지없이 돌아온 초급 용 입니다 . 그간 업무 가 바쁜 관계 로 . . ( -_ ㅡ ; 전혀 죄송 하 지 않 습니다 . 세 번 째 초급 용 함수 와 클래스 의 기본 개념 에 대해서 써볼까 합니다 . 그 첫 번 째 시간 으로 함수 에 대해서 알 아 봅시다 . . 뭐 앞서 제 가 이런 글 을 쓰 는 이유 를 모르 시 는 분 들 은 js 편 을 먼저 보 시 기 바랍니다 . 초급 용 이 라 아 시 는 분 은 안 보 셔도 됩니다 . 태클 은 영구 반사 아이템 을 사용 하 겠 습니다 . 프로그램 을 제작 하 다 보 면 많 은 코드 의 양 때문 에 혹은 반복 적 으로 발생 되 는 코드 때문 에 우리 는 아주 열심히 잘 하 는 ? , 안 가르쳐 줘도 타고나 는 재주 ? 를 여지없이 발휘 합니다 . 궁극 의 Ctrl + C & V 신공 ( -_ ㅡ ) ) ) 하지만 이런 거 말 고 좀 더 쉬운 게 없 을까요 ? 일 의 효율 성 을 높일 수 있 는 궁극 적 인 해결책 그 첫 번 째 방법 이 바로 사용 자 정의 함수 ( user function ) ! 음 . . 사용 자 정의 함수 라는 명칭 이 있 는지 잘 모르 겠 군요 ^^; 하지만 저 는 그렇게 부릅니다 . 언어 를 제 가 개발 한 언어 개발 자 가 아니 기 때문 에 만들 어 놓 은 문법 에 따라 언어 를 사용 하 는 사용 자 라는 개념 에서 죠 . 아무튼 함수 의 생 성 에 관한 이야기 입니다 . 직접 적 인 코드 도 있 지만 개념 적 인 설명 이 많 기 때문 에 다소 지겨울 수 도 있 습니다 . 책 을 통한 설명 이나 개 시판 을 통한 학습 을 하 다 보 면 많 은 초급 개발 자분 들 이 함수 를 어떻게 만들 어야 할까 에 대해서 많 은 고민 을 하 게 됩니다 . 쉬운 예 로 자 오늘 은 페이징 로직 을 이용 한 함수 를 만들 어 봅시다 ~ 이러 면 페이징 을 배웠 어도 어떻게 함수 로 만들 어야 할지 또 함수 를 만들 면 어떻게 함수 가 동작 되 는가 , 함수 를 사용 하 면 어떤 이점 이 있 는가 등등 별의별 잡다 한 생각 을 하 면서 결국 function paging ( ) { | } 커서 를 저 위치 에 놓 고 궁리 만 하 고 있 죠 -_-;; 결론 부터 말씀 드리 면 함수 를 쉽 고 빨리 만들 기 위해서 는 먼저 기능 구현 부터 해야 합니다 . 함수 부터 만들 겠 다고 function 함수 명 ( ) 이렇게 해 놓 으면 다음 에 뭘 해야 할지 솔직히 감 안 오 죠 . 수십 번 을 만들 어도 마 찮 가지 입니다 . 수백 번 을 만든다면 가능 해질 문제 이 긴 합니다만 . . 우리 에게 는 그렇게 많 은 시간 이 없 다는 것 이 죠 . 선행 학습 내용 으로 함수 는 어떻게 동작 되 는가 를 알 아야 겠 습니다 . php 해 석기 ( parser ) 는 function 을 만나 게 되 면 일단 메모리 에 로드 시켜 놓 습니다 . 변수 를 선언 했 을 때 메모리 의 일정 공간 을 선언 된 변수 명 으로 할당 받 는 것 과 같 은 이치 입니다 . 선언 된 변수 와 함수 는 언제 든 재 사용 가능 하 다는 거 아 시 겠 죠 ? 다만 php 의 특성 상 파일 단위 프로그램 이 종료 되 면 모든 변수 와 함수 는 언 로드 ( 메모리 에서 삭제 ) 된다는 것 을 유의 하 시 기 바랍니다 . 특정 기술 인 공유 메모리 , 세마포어 등 을 이용 하 면 타 사용자 간 의 데이터 공유 도 가능 합니다 만 . ... C 언어 를 먼저 공부 를 해야 만 메모리 접근 , 제어 에 이해 가 될 것 입니다 . 그럼 실질 적 인 예제 를 통해서 함수 를 만드 는 방법 을 읶혀 보 겠 습니다 . ※ 기능 구현 ( 구구단 3 단 ) 아주 고전 적 인 예제 중 구구단 만들 기 라는 예제 가 있 습니다 . 아주 오래 된 예제 이 지만 현재 도 기초 수업 에 사용 되 는 이유 는 각종 제 어문 을 다양 하 게 사용 함 으로서 문법 과 로직 을 효과 적 으로 이해 하 는 좋 은 예제 이 기 때문 입니다 . 구구단 출력 에 관한 코드 는 별도 의 주석 을 첨부 하 지 않 겠 습니다 . $ dan = 3 ; $ exp = 1 ; $ summary = 0 ; while ( $ exp < 10 ) { $ summary = $ dan * $ exp ; echo $ dan . ' * '. $ exp . ' = '. $ summary . '< br / >'; $ exp ++; } 쉽 죠 ? 이 정도 는 알 고 계시 리라 생각 하 고 진행 하 겠 습니다 . 기능 은 완벽 했 습니다 . 더 이상 나무랄 데 없이 정확 한 결과 가 출력 되 었 습니다 . 우리 가 원 하 는 기능 이 구현 된 상태 에서 함수 를 제작 하 겠 습니다 . 일단 아무 생각 하 지 말 고 function 부터 선언 합시다 ! ! ※ 함수 선언 function gugudan ( ) { $ dan = 3 ; $ exp = 1 ; $ summary = 0 ; while ( $ exp < 10 ) { $ summary = $ dan * $ exp ; echo $ dan . ' * '. $ exp . ' = '. $ summary . '< br / >'; $ exp ++; } } 음 . . 뭔가 좀 되 는 분위기 ! ! 어 이 수업 에 불 만 있 냐 눈 돌리 지 마 라 5 분 만 집중 하 면 1 년 뒤 연봉 이 달라진다 ! ㅡ _-?? ( 진짜 ? ) 그런데 이제 두 번 째 항목 으로 생각 해야 할 문제 가 발생 했 습니다 . 이렇게 해 놓 으면 항상 gugudan 함수 를 호출 할 때 마다 3 단 만 출력 된다는 게 불만 입니다 . 이렇게 할 거 같 으면 뭐 하 러 함수 를 쓴단 말 인가 그냥 복사 & 붙이 기 신공 을 쓰 는 거 랑 뭐 가 다르 단 말 인가 ? 그렇 습니다 ~ 그래서 나온 게 매개변수 입니다 . 함수 를 만드 는데 있 어서 결정 적 으로 프로그램 의 유기 적 흐름 을 만들 기 위한 방법 ! 그런데 이 매개변수 를 하 기 전 에 먼저 전역 변수 와 지역 변수 에 대한 개념 이 잡혀 있 어야 합니다 . 전역 변수 <? $ toto =" 전 역변 수다 ~"; $ 로또 = " 이것 도 전 역변 수다 ~"; ? > 어 ? 변수 명 을 한글 로 ? ?? 가능 합니다 ^^ php 만 이 가능 한 기능 중 에 하나 죠 하지만 성능 적 으로 는 안 좋 습니다 . 이유 는 1 byte 처리 와 2 byte 처리 에 있 습니다 . 아무튼 여러분 은 여지껏 전역 변수 만 을 사용 했 다면 이제 는 지역 변수 도 알 아야 합니다 . <? $ toto = " 전역 변수 "; echo $ toto ; function act ( ) { echo $ toto ; $ toto = " 지역 변수 "; echo $ toto ; } ? > 아니 변수 명 이 같 자 나 ? 그런데 엄격히 말 하 면 함수 안 의 변수 와 함수 밖 의 변수 는 시스템 에서 다르 게 인식 합니다 . 함수 안 에서 사용 하 는 변수 는 지역 변수 이 기 때문 에 두 번 째 echo 는 아무것 도 출력 하 지 못합니다 . 그럼 매개변수 는 뭐 에 요 ? ??? 매개변수 는 이런 지역 변수 와 전역 변수 간 의 특정 data 를 주 고 받 는 통로 이 자 함수 내 에서 사용 할 변수 를 미리 선언 해 놓 은 것 입니다 . 어렵 나요 ? 아래 예제 를 보 시 죠 ~! <? $ toto = " 나 전역 변수 ! !"; function act ( $ gaga ) {// 변수 $ gaga 가 바로 매개 변수 입니다 . echo $ gaga ; } act ( $ toto ) ; / / / 문제 의 핵심 함수 를 호출 할 때 ! ! ? > act 라는 함수 를 호출 할 때 gaga 변수 가 받 아야 할 정보 를 가지 고 있 는 $ toto 변수 를 지정 해 줌 으로써 toto 변수 의 값 을 gaga 변수 가 가지 게 되 는 것 이 죠 . 음 . . 그럼 이제 매개변수 를 이용 해서 함수 를 호출 할 때 지정 해 준 단의 구구단 을 출력 해 봅시다 . ※ 매개변수 <? function gugudan ( $ dan ) { $ exp = 1 ; $ summary = 0 ; while ( $ exp < 10 ) { $ summary = $ dan * $ exp ; echo $ dan . ' * '. $ exp . ' = '. $ summary . '< br / >'; $ exp ++; } } gugudan ( 4 ) ;//$ dan 변수 가 받 을 값 을 직접 지정 ? > 이런 코드 가 되 었 습니까 ? 아니 매개 변수 자리 에 그냥 4 를 지정 했 네요 ? 맞 습니다 함수 를 호출 할 때 에 는 매개변수 의 자리 에 데이터 를 직접 지정 해도 되 고 혹은 선언 된 변수 를 지정 해도 됩니다 . 이렇게 함 으로써 여러분 은 이제 입력 되 는 수 에 따라 해당 수 의 구구단 을 출력 하 는 함수 를 만들 었 습니다 . 그럼 꼭 매개변수 를 써야 만 함수 안 과 밖 의 특정 값 을 주 고 받 을 수 있 습니까 ? 아닙니다 . 매개변수 이외 에 도 전 역화 ( global ) 라는 개념 이 있 습니다 . global 로 선언 된 변수 들 은 함수 안 밖 에 구애 받 지 않 고 사용 할 수 있 습니다 . 다시 말 하 면 전역 변수 , 지역 변수 의 개념 이 아닌 하나 의 변수 를 공통 적 으로 사용 하 는 방법 입니다 . ※ global <? function gugudan ( ) { global $ dan ; $ exp = 1 ; $ summary = 0 ; while ( $ exp < 10 ) { $ summary = $ dan * $ exp ; echo $ dan . ' * '. $ exp . ' = '. $ summary . '< br / >'; $ exp ++; } } $ dan = 4 ; gugudan ( ) ; ? > $ dan 변수 를 함수 내 에서 global 로 선언 하 면 더 이상 $ dan 변수 는 지역 변수 가 아닌 전역 화 되 어서 함수 안 , 밖 에서 동일 하 게 취급 받 습니다 . 함수 를 호출 하 기 전 에 $ dan 변수 에 4 를 지정 했 기 때문 에 정상 적 으로 4 단 이 출력 되 는 것 을 볼 수 있 습니다 . 전 역화 도 마 찮가지로 하나 의 변수 만 을 쓰 는 것 은 아닙니다 . global $ 변수 명 , $ 변수 명 , $ 변수 명 ; 이런 형식 으로 쓸 수 있 습니다 . 이 예제 에서 사용 되 지 않 은 return 이 라던가 복수 의 값 을 전달 하 는 방법 등 은 여러분 이 직접 생각 해 보 시 기 바랍니다 . ( 복수 의 값 리턴 힌트 는 배열 입니다 . ) 아 시 다 싶 이 매개변수 라는 것 은 한 개 만 을 사용 할 수 있 는 것 은 아닙니다 . 함수 내부 적 으로 어떤 데이터 를 처리 할 것 이 냐 에 따라 매개변수 는 여러 개 가 될 수 있 습니다 . 이제 함수 를 만들 기 위한 방법 을 정리 를 해 보 죠 . 1 . 기능 구현 . 2 . 함수 선언 . 3 . 자료 를 입력 받 을 것 인가 ? 내부 적 으로 처리 할 것 인가 ? 4 . 매개변수 를 사용 하 면 몇 개 를 사용 할 것 인가 ? 5 . 실행 결과 를 함수 내 에서 출력 할 것 인가 ? 호출 한 곳 으로 되돌려 줄 것 인가 ? 1 , 2 항목 은 일반 적 진행 이 면 3 ~ 5 항목 은 여러분 이 즉 함수 를 만드 는 사람 이 선택 해야 할 문제 입니다 . 이번 함수 만들 기편 에서 많 은 부분 을 다루 고 싶 었 지만 그렇게 되 면 너무 깊이 들 어 가 게 됨 으로 본래 의 취지 인 초급 용 이상 의 내용 을 다루 게 될 것 같 아서 여기 에서 마무리 짖 겠 습니다 . P . S ) 함수 를 만들 때 유 의 사항 1 . 반복 적 으로 사용 되 는 내용 인가 ? 2 . 단편 화 or 모듈 화 되 었 는가 ? 위 두 가지 항목 은 함수 를 반복 적 으로 만드 는 연습 을 하 다 보 면 자연 스레