본문 바로가기
카테고리 없음

코드이그나이터의 네임스페이스, 그리고 모델

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

♣ 8. 코드이그나이터의 네임스페이스, 그리고 모델 ♣


연휴가 끝나고 다시 몸의 시계를 일상의 패턴으로 맞추느라 많은 분들이 고생이 많으실 줄 압니다.
아무쪼록 다시 적응하셔서 무리 없이 건강한 생활 유지하시길 바랍니다 :)


지난 시간에는 php의 네임스페이스에 대해서 다뤄보았었는데요.
php7의 공통 지식에 해당하는 방식으로 네임스페이스 ( namespace ) 를 이해하였으나,
이번 시간에는 코드이그나이터의 네임스페이스에 대해 이해해보도록 하겠습니다.

php 는 원래 파일명과는 무관하게 자유롭게 네임스페이스 이름을 정의할 수가 있습니다.
소스 1개에 2, 3개의 네임스페이스를 사용할 수도 있는 것도 다른 언어에서는 찾아볼 수 없는 이례입니다.
php가 다른 언어의 특성을 점점 닮아간다해도 역시 자유도가 높은 php입니다.

하지만 코드이그나이터에서는 규칙을 지켜주는 것이 좋습니다.
또한 그렇게 일부러 제한을 두기도 합니다.

네임스페이스 이름을 자유롭게 정해주는 것은 코딩이 자유로운 반면,
어느 네임스페이스가 어느 소스에 위치해 있는지 찾기 어려운 불편함도 있습니다.

이는 소스파일의 갯수가 많아질수록 확연히 드러나는데요.
파일을 적재하기 위한 규칙을 세우고 그 규칙을 지켜 차곡차곡 쌓아놓는다면
나중에 수정할 때도 찾기가 쉬울텐데 말이죠.
아무래도 php 는 경주에 적합한 말이라기보다는 야생마에 가깝습니다 :)

코드이그나이터는 네임스페이스 규칙에 대해 그리 관대하지 않습니다.
지난번 아메리카노와 카페라떼 소스는 코드이그나이터4에서 보통 클래스 형태로 정의해서 많이 사용하는데요.
보통 app\Models 폴더에 저장하는 것이 일반적입니다.

app\Models\Americano.php

<?php namespace App\Models;

class Americano
{
    public function Drink()
    {
        echo "구수하다<br/>";
    }
}

app\Models\Cafelatte.php

<?php namespace App\Models;

class Cafelatte
{
    public function Drink()
    {
        echo "달다<br/>";
    }
}

namespace 는 반드시 폴더명인 App\Model 을 사용하여야 하며 대소문자는 구별 없이 사용 가능합니다.
안 그러면 에러가 나더군요 :)
클래스명 또한 대소문자는 관련없으나, 파일명과 동일하게 주어야 합니다.

이러한 규칙의 틀 안에서 코딩할 때 이로운 점은 어떤 네임스페이스의 어느 클래스가 어느 폴더에 어느 파일에 있는지 명확하다는 것이지요.

지난번 Sample2\Book.php 를 아래와 같이 고쳐봅시다.

<?php namespace App\Controllers\Sample2;
use CodeIgniter\Controller;
use App\Models\Americano;
use App\Models\Cafelatte;
	
class Book extends Controller
{
	public function index()
	{
		$Americano = new Americano();
		$Cafelatte = new Cafelatte();
		$Americano->Drink();
		$Cafelatte->Drink();
	}
}

여기서 use App\Models\Americano 명령문으로 인해
App\Models 폴더에 있는 Americano.php 파일에 클래스가 위치해 있는 것을 대략 짐작할 수 있습니다.

코드이그나이터는 특히 require 문으로 클래스 파일을 따로 로드할 필요가 없는데,
Models 폴더에 있는 파일을 알아서 require 시키기 때문인 것으로 보입니다.
그렇기 때문에 사용법만 잘 익히면 소스가 매우 간결해집니다.

위 소스의 결과 또한 지난 주와 같습니다.

구수하다
달다

지난주와 결과는 동일하지만 코드이그나이터는 이 방식을 선호합니다.

app\Models 폴더에 클래스를 하나하나의 파일로 심어놓고, 컨트롤러에서 이를 가져다가 쓰는 방식을 일컬어
MC ( Model - Controller ) 방식이라고 합니다.

코드이그나이터에서 '모델'의 의미란 바로,
작동가능한 '클래스'인 셈이지요.

컨트롤러도 클래스이긴 하지만 어디까지나 웹페이지에 대응하는 클래스입니다.
모델 폴더의 클래스는 개념적인 클래스라고 생각하시면 딱 좋을듯 합니다.

코드이그나이터4의 MVC 패턴중 Model - Controller 에 대해서 다뤄보았고요.
다음 시간에는 아직 다뤄보지 않은 View 를 구성하는 방법에 대해 알아보겠습니다.

여기까지 읽어주시느라 수고 많으셨습니다.
감사합니다 :)

 

다음강좌 보러가기 / https://itadventure.tistory.com/147

 

코드이그나이터 뷰의 파라미터 전달

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93 2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95 3. 비주얼 스튜디오 코..

itadventure.tistory.com