리팩토링 - 내부적인 코드를 유지 보수하기 편하게 중복된 코드를 제거하고 개선하는 작업
- require() - 다른 파일에 정의되어있는 코드가 필요할 때, 해당 파일이 필요하다고 알려준다.
- require_once() - 한 번 require된 코드는 무시하고 넘어간다.
코드의 문제점 살피기
1. 코드 중복 - 재사용 코드
index.php 와 create.php 에 함수를 정의하는 부분이 중복
print_title()함수에 개선사항을 추가하면?
다 수개의 페이지에서 print_title()함수를 수정해야 하는 번거로움이 생기고, 놓치기 쉽다.
좋은 코드를 만드는 아주 쉬운 실천 방법 - "중복을 제거", 정리정돈
프로그래밍에서 재상요할만한 코드나 로직을 잘 정리 정돈해놓은 것 - 라이브러리(lib)
* 도서관(라이브러리) - 책을 꺼내 보기 쉽도록 잘 정리정돈한 곳
lib 디렉토리애 재사용할 가능성이 있는 것들을 잘 정리 정돈하여 저장한다.
1. lib디렉토리 생성 후, print.php에 print 함수들 정의 구현 부분을 저장
2. 기존에 print_xx() 함수구현 부분을 삭제 후, require 코드 추가
이 코드는 "lib안에 있는 print.php 라는 파일에 있는 코드들을 필요로 한다.(require) " 고 알려줘야한다.
index.php, create.php, update.php 파일 모두 수정
<?php
require('./lib/print.php');
?>
2. 코드 중복 - view 코드
라이브러리는 "재사용"이 가능한 코드를 모아두는 곳이다. 보여지는 것과 관련된 코드는 보통 라이브러리라고 한다기보다는 별도의 폴더로 저장한다.
모든 페이지를 통합적으로 관리할 수 있는 장점이 생긴다.
1. view 디렉토리 생성 - 화면을 구성하는 view 관련 코드들을 저장한다.
2. 모든 페이지에 마지막은 </body></html> 로 끝난다. 이 부분을 bottom.php 파일로 저장
3. 기존 </body></html> 태그를 삭제 후, require 코드 추가
1. 모든 페이지에 상단에 중복된 코드를 제거 후, top.php 파일로 저장
2. 기존 코드 위치에 require 코드 추가
이상적인 코드는 아니다. index.php에서 호출하는 print_title() 이라는 함수는 ./lib/print.php 라는 파일에 존재한다는 것을 알 수 있지만, top.php 코드에서 print_title()함수를 호출하고 있음에도 어디서 왔는지 알 수 없다. 따라서 "인과관계가 항상 드러나야 할 필요가 있다."
따라서 top.php 파일의 상단에도 require로 ./lib/print.php 코드를 추가해주면, top.php 파일만 봤을 때 print_title()함수가 print.php 에서 왔다는 것을 한눈에 알 수 있다.
=> "코드가 분명해지고 암시적이지 않게 된다."
▶ 이렇게 수정했을 때 error가 발생한다.
"중복해서 선언되었다."
index.php 코드에서 print.php 를 require 하면 print.php에서 print_title() 함수를 정의하고 있다. 그런데 index.php 에서 top.php를 require 하고, top.php에서 다시 print.php를 require 하면, print.php 에서 print_title() 함수를 정의하려고 하는데, 이미 한번 정의가 되어있기 때문에 "재정의 할 수 없다"는 오류 메시지가 뜨는 것이다.
PHP에서는 한 번 만들어진 함수는 다시 재정의할 수 없도록 되어있다.
이러한 에러를 방지하기 위한 함수 "require_once()" 가 있다.
index.php에서 print.php를 require 하고, top.php를 require 한다. top.php에서 print.php를 require 하려고 하면 php가 이미 한번 require 했기 때문에 이 코드를 무시하고 넘어간다.
중복해서 print.php가 호출되는 것을 방지하기 때문에, 에러가 발생하지 않는다.
'코딩공부 > WEB2 - PHP' 카테고리의 다른 글
[15] PHP 보안 (0) | 2019.09.27 |
---|---|
[13] PHP 글 삭제 기능 구현 (0) | 2019.09.26 |
[12] PHP 글 수정 기능 구현 (1) | 2019.09.26 |
[11] PHP 글 생성 기능 구현 (0) | 2019.09.26 |
[10] PHP에서 FROM과 GET, POST (0) | 2019.09.26 |