블로그 프로필 이미지

SMALL





코어(Core) 시스템 클래스 란?


 코어 시스템 클래스는 코드이그나이터에서 CI 가 작동될때마다, 자동으로 초기화 되어, 사용자가 로드하지 않아도, 작동되는 클래스를 뜻한다. 한가지 쉬운 예를 들면, URI 클래스를 들 수 있다. 이 클래스는 환경설정파일인 autoload 에서 자동로드 를 설정하거나 사용자가 임의로 로드해 주지 않아도 CI에서 작동될때마다 자동으로 초기화가 이루이지게 되는데 이러한 클래스를 코어 시스템 클래스라고 한다.


 코어 시스템 클래스 같은 경우 CI의 메뉴얼을 보면 사용자가 수정하기엔 여러가지 위험이 따른다고 설명이 되어있다. 하지만 멋데로 수정하지 않는 이상 위험까지 따르지는 않으니, 안심해도 된다. 물론 나의 개인적인 생각일 뿐이다.




☞ 코어(Core) 시스템 클래스 목록


아래는 코어 시스템 클래스 목록이며, 이러한 클래스들은 위에서도 말했다시피 CI가 작동될때마다 호출되는 클래스 들이다.


  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • Security
  • URI
  • Utf8

( http://www.codeigniter.com 에서 메뉴얼 참고 )




☞ 코어(Core) 시스템 클래스의 대체


 코어 시스템 클래스의 대체의 경우 아래와 같은 코드를 이용할 수 있다. 아래의 예제는 대체 할려는 코어 시스템 클래스가 URI 인 경우이며 대체 클래스명은 아래와 같이 CI 라는 접두어로 시작하여야 한다.


<?php
class CI_URI{
    /* 대체 코드 작성 */
}
?>


 위와 같이 코어 시스템 클래스를 대체할 코드를 작성한뒤 application/core 디렉토리에 저장하면 된다. 저장할때는 CI 접두어를 뺀 URI.php 로 저장하면된다. 



 코어 시스템 클래스의 대체하는 방법은 매우 간단하나 대체를 하여 수정하는건 위험한 부분이니 CI 프레임워크의 구조를 잘 모른다면 사용하지 않는게 좋다. 하지만, 오류가 나더라도 걱정할건 없다. 그이유는 코어 시스템 클래스의 대체는 코드이그나이터에서 제공되는 방법중 하나이기때문에, 자신이 대체한 파일에서 오류가 난부분을 수정하거나 수정이 불가피 할 시 에는 삭제를 하면 되기 때문이다.  




☞ 코어(Core) 시스템 클래스의 확장


 코어 시스템 클래스를 확장하는 방법은 그렇게 어려운 부분이 아니다. 또한 코어 시스템 클래스의 대체 방법보단 훨씬 유용한 방법이기도 하다. 기본적으로 코어 시스템 클래스를 확장하기 위해선 아래와 같은 규칙과 특징을 가지고 있다.


  • 클래스를 생성할 시 클래스명은 반드시 application/config/config.php 에 정의된 변수인 $config['subclass_prefix'] 값으로 시작해야한다.
  • 클래스를 생성할 시 확장할라는 내장 코어 시스템 클래스를 extends 하여 생성해야 한다. 
  • 만약 확장된 클래스 내 메소드에서 내장 클래스에 정의된 메소드와 같은 이름의 메소드가 존재한다면, CI 에서는 내장 클래스에 정의된 메소드 대신 사용자가 정의한 메소드를 사용하게 된다.


 아래의 예제는 위의 규칙을 적용하여 확장된 코어 시스템 클래스이다. 확장된 코어 시스템 클래스는 Controller 이며, Controller 에서 전역적으로 사용되는 메소드가 있을 시 유용하게 사용할 수 있다.


<?php defined('BASEPATH') OR exit('No direct script access allowed');
/* MY Controller */
class MY_Controller extends CI_Controller {

    var $data;

    function __construct()
    {
        parent::__construct();
        
        if(isset($_POST['data'])){
            
            $this->data=$_POST['data'];
            
        }else{
            
            $this->data='NULL'; 
        }

    }
    
    function _header($header)
    {
        $header['data']=$this->data;
        $this->load->view('header',$header);
    }

}
?>


 위와 같이 코어 시스템 클래스를 확장하였다면, Controller 에서는 기존에 확장하여 사용하던 CI_Controller 가 아닌 새로 확장된 코어 시스템 클래스인 MY_Contrller 를 extends 해주어야 한다. 아래는 확장된 코어 시스템 클래스를 사용하는 예제이다.


<?php defined('BASEPATH') OR exit('No direct script access allowed');
/* Main Controller */
class Main extends MY_Controller {

    
    function __construct()
    {
        parent::__construct();
        echo $this->data;
        
    }
    
    function index()
    {
        $header['title']='REDINFO';
        $this->_header($header);
    }

}
?>


 위에서도 계속 언급했다시피 코어 시스템 클래스의 확장은 프레임워크의 내부를 대체 하거나, 새로 추가하는것이기 때문에, 되도록 이면, 대체보단 확장을 사용하는것이 위험성을 줄일 수 있다. 물론 개발자들마다 스킬이 다르기 때문에, 더 나은 코어 시스템 클래스를 대체 또는 확장 하는건 개발자들의 몫이지 위험성을 놓고 볼 문제만은 아니다. 

LIST