PHP 프로그래머..
한국웹에서 가장 많이 사용하는 언어면서도 PHP라는 이유만으로 많은 무시를 받는 언어이기도 하다.
그리고 쉽게 익힐수 있는 언어인지라(물론 어렵게쓰자고 맘만 먹으면 결코 쉽지 않은게 모든 프로그램 언어들이기는 하지만) 어쨌든 초보에게는 선물 같은 언어지만 언어의 특성상 한계를 만들게 하는 언어이기도 하고 특히 4.x버전들이 PHP로 시작한 프로그래머들에게 많은 한계를 스스로 만들게 하곤한다.
그중 대표적인것이 아마도 클래스의 사용일것이다.
사실 4버전대의 PHP는 클래스라는게 다른 언어에 비해서 부족한 점이 너무 많아서 왜 쓰는가 라는 생각도 하기는 하지만 그런 모든 의미를 버린다 하더라고 단순히 사용자 함수를 클래스 별로 묶는 것만으로도 소스관리에 많은 도움이 된다.
간혹 시작한지 오래 되지 않은 PHP개발자들에게 클래스의 사용에 대해서 물어보면 많은 분들이 뭐하러 클래스 써요 라는 이야기를 많이 하고 본인도 초창기에 그런 이야기 하곤 했지만 최소한의 목표를 가지고 클래스를 사용하더라도 많은 것을 얻을 수 있는 장점이 있다.
그래서 그냥 써보기로 했다.
단순하게 사용자 함수들을 묶는 의미로서의 클래스쓰는 방법을.... 사실 쓸것도 없다. 하지만 막연하게 클래스 사용에 대해서 공포심을 갖고 있는 분들을 위해 실제로 바로 써먹을 수 있게 초간단 버전으로 한번 써보겠다.
1. 4버전의 CLASS는 단순 그자체이다.
5버전대만 해도 나름 타 언어들의 기능들을 접목했기때문에 모양이 그럴싸하게 나오기 마련이지만 4버전대의 클래스는 말그대로 단순하다.
<?php
CLASS UserClass { // 클래스명
}
?>
클래스 자체는 위처럼 시작하고 끝내면 된다.
1.1
그런데 다른 언어들을 보면서 생성자라고 하는 말을 들어 봤을 것이다.
쉽게 얘기하면 클래스를 불러 왔을때 별다른 동작을 지정하지 않아도 실행되는 메소드를 말한다.
어떻게 사용 할까?
메소드라고 했으니 함수의 형태일것이고 4버전에서 생성자는 클래스 명과 동일한 메소드를 만들어 주면 클래스 객체를 new 로 생성 했을때 자동으로 생성자 내의 프로세스가 진행된다.
<?php
class UserClass {
// 생성자
function UserClass( $dbConn ) {
//처리 내용
$query = "select * from aaa ";
.
.
.
return $rv;
}
}
?>
위처럼 메소드를 만들어 주면 클래스를 불러올때 해당 메소드는 장동으로 실행된다.
메소드의 내용은 보통 작업할때 함수를 만들듯이 작성하면된다.
이글의 요점은 클래스를 유사 함수들의 묶음으로만 사용해보자 라는 것이므로 다른건 생각 하지말자.
1.2 클래스 불러오기
자 그러면 위에 기술한 UserClass를 어떻게 사용해야 할까?
클래스를 한번도 사용하지 않앗던 PHPer들의 막연한 두려움, 정말 부질없는 두려움이다.
<?php
$conn = mysql_connect(..........);
$obj = new UserClass($conn); // 생성자로 DB연결을 넘긴다.
?>
일단 이렇게 불러온다.
new 클래스명();
만약 생성자에서 인자를 받게 되어있다면
new 클래스명(인자); 로 넘겨 준다.
위의 예에서는 $conn 이란 database 연결 정보를 클래스로 넘겨 주고 있다.
1.3 지시자
자 여기까지 별거 아니다. 그런데 이런 궁금증이 든다 .
위의 예제에서는 메소드가 생성자 단 한계뿐이다. 사실 생성자에서는 직접적인 처리 보다는 처리되는 프로세스나 또는 기타 작업에 필요한 부분들을 기술 하는 경우가 많다.
즉 내부에서 사용할 변수의 설정이나 if 등을 이용해서 조건별로 다른 클래스나 자신이 가진 메소드를 불러서 처리하는 과정들을 많이 한다.
이때 자신이나 다른 클래스의 메소드나 변수 등을 사용할때 쓰는 것이 바로 지시자 이다.
PHP의 지시자는
$this->
위처 럼 사용한다.
변수의 경우는 $this->vars
메소드의 경우는 $this->vars()
처럼 사용한다
알기 쉽게 위의 사용법들의 종합적인 예를 들어 보자(<?php ?>는 생략)
class Test {
// 1. 생성자가 받는 $a , $b 를 클래스의 모든 메소드가 사용할 수 있도록 선언해준다
var $aVar; // $a를 받을 변수
var $bVar; // $b를 받을 변수( 2. $a , $b 로 받아도 상관없고 이처럼 이름을 다르게 정해 줘도 된다.
function Test( $a , $b ) {
// 3. 현재상태로는 $a와 $b를 다른 메소드가 이용 할 수 없다.
// 4. 아래처럼 설정해주면 클래스 내의 메소드들이 변수에 접근 가능해진다.
$this->aVar = $a;
$this->aVar = $a;
}
// 5. 생성자가 받은 변수를 이용해서 값을 더해서 반환해 보자
function plus() {
// 6. 메소드가 별도의 인자를 받지 않았음에도 불구하고 생성자가 받은 변수에 접근 할 수 있다.
$total = $this->aVar + $this->bVar;
return "함계는 ::".$total;
}
}
// 7. 클래스 객체 생성
$obj = new Test(7,10);
// 8. 객체가 생성이 되었으므로 $obj를 이용해서 클래스 내부의 메소드에 접근 할 수 잇다.
// 9. 생성자를 통해 값이 넘어 갔으므로 바로 합계 메소드를 불러 오면 된다.
$total = $obj->plus();
echo $tatal;
<<결과>>
합계는 :: 17;
위처럼 출력이 되면 정상이다.
결국 정모르겠다면 별부담없이 클래스 하나 만들고 그안에 메소드들을 채워 넣으면된다.
생성자 역시 없어도 되기때문에
만약 생성자가 없을 경우
$obj = new Test();
위처럼 생성해서
내부의 메소드들로 접근하면된다.
$obj->메소드명;
오늘은 여기까지
PS . 비록 제대로된 용어 써가면서 아는척 하면 쓴 내용은 아니지만 가급적이면 쉽게 사용하길 바라는 바음에서 쓰고 있으므로 지금 사용하기 위해 만들어 놓은 수많은 사용자 함수들을 비슷한 기능으로 모아서 클래스에 넣어 두고 사용한다면 나중에 의외로 편리하게 사용하는 자신을 발견 할 수 있을것이다.
PS2. 내일은 다른 클래스를 이어 받아서 사용하는 상속에 대해서 알아보자.
쉽게 얘기 하면 두개의 클래스 합체 또는 덮어 씌우기도 될 수 있고 그런 용어를 사용하는 상속에 대해서
쉬운 말로 써보겠다