phpclass/클래스활용2004. 7. 12. 10:08
클래스 | 객체 | 인스턴스
클래스(class) 객체(object) 인스턴스(instance)
객체의 변수와 함수를 정의하는 템플릿 클래스를 실체화시킨 것으로 실제로 기억장소가 할당되어 사용됨 클래스에 정의된 특성을 가지게 되는 객체를 의미하며 일반적으로 객체와 동의어로 사용됨

Posted by 방글24
phpclass/클래스활용2004. 7. 12. 10:05
클래스 상속
기존의 클래스 확장된 클래스
용어 영문 용어 영문

기반클래스

base class

파생클래스

derived class

수퍼클래스

super class

서브클래스

sub class

부모클래스

parent class

자식클래스

child class


Posted by 방글24
phpclass/클래스활용2004. 7. 12. 10:00
객체지향언어에 따라 같은 의미를 나타내는 용어가 서로 다르게 표현되기 때문에 혼돈을 방지하기 위해 여기에 정리하여 둡니다.
함수, 변수 및 상수
PHP 변수 함수(또는 메소드)
스몰토크 인스턴스변수 메소드
자바 변수(인스턴스변수,클래스변수) 메소드
자바스크립트 속성(property) 메소드
C++ 데이터멤버 멤버함수
Zend 엔진 2.0부터 클래스 내에서만 사용하게 되는 상수를 정의할 수 있게 되었습니다. 따라서 데이터멤버에는 변수뿐만 아니라 상수도 포함됩니다. 이에 따라 멤버변수만을 가지고는 상수까지 포함할 수가 없게 되었네요. Zend 엔진 2.0 문서를 보면 상수와 변수를 모두 포함할 때 프로퍼티(property)라는 용어를 사용하고 있습니다.
< Zend 엔진 2.0이 지원하는 클래스 멤버 >
클래스 멤버 의미
상수 상수는 상수 값을 나타내는 클래스 멤버입니다.
변수 변수는 변수 값을 나타내는 클래스 멤버입니다.
생성자 인스턴스 생성자는 클래스의 인스턴스를 초기화하는 데 필요한 동작을 구현하는 멤버입니다.
소멸자 소멸자는 클래스의 인스턴스를 소멸시키는데 필요한 작동을 구현하는 멤버입니다.
메소드 메소드는 개체나 클래스에 의해 수행될 수 있는 계산이나 작업을 구현하는 멤버입니다.

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:24
함수에 의한 모듈화에서는 모듈화 단위가 함수 하나만 가능합니다. 앞에서 살펴보았듯이 2개 이상의 함수를 하나의 모듈로 만들려면 스코프(scope) 및 이름공간(namespace) 문제로 함수로는 불가능하며 이 때는 반드시 클래스를 이용하여야 합니다.
이상과 같이 살펴보았듯이 클래스가 필요할 때가 있고 함수가 필요할 때가 있습니다. 모든 경우에 다 클래스를 사용하는 것은 비효율적일 수 있습니다. 경우에 따라 적절히 선택하는 지혜가 필요합니다.
  1. 함수도 필요없을 만큼 간단한 소스를 작성한다면 함수에 의한 모듈화도 필요없고 구조화 프로그래밍만 하면 됩니다.
  2. 모듈화가 필요하기는 한데 작성된 함수들이 단순히 단타성 함수로만 사용된다면 함수를 이용하여 모듈화하세요.
  3. 모듈화 단위가 여러 개의 함수로 구성된 라이브러리라면 특별한 경우가 아니라면 클래스를 이용하여 모듈화하세요.
여러분에게 PHP에서 클래스를 이용하여 객체지향 프로그래밍을 하라고 권하지는 않겠습니다. 여러분의 판단에 맡기지요. 그러나 클래스를 이용한 모듈화 프로그래밍에는 망설이지 마십시요. 여러분이 생각하는 것처럼 클래스를 이용하였다고 해서 객체지향 프로그래밍이 되는 것은 아닙니다. 그러나 클래스는 모듈화를 위한 훌륭한 도구입니다. 모듈화 도구로써 함수가 삽이라면 클래스는 포크레인입니다.
PHP에서 함수라는 도구를 우리에게 제공하므로서 우리가 함수를 유효적절하게 이용할 수 있었듯이 클래스라는 도구 또한 우리는 최대한 이용하여야 할 것입니다. 클래스는 타도 대상이 아니라 프로그래밍을 하는 우리를 도와주는 친구입니다.

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:23
이름공간은 현재 동작하는 프로그램에 정의되어 있는 변수명, 함수명, 클래스명 등과 같은 이름을 기록하기 위한 공간에 관련된 매카니즘을 총칭합니다. PHP에는 아래와 같이 크게 3가지 이름공간이 존재하는 것으로 보입니다.
전역 이름공간 - 함수(또는 클래스) 바깥쪽에서 정의된 이름
지역 이름공간 - 함수(또는 메소드) 안에서 정의된 이름 또는 클래스 안에서 정의된 이름
내장 이름공간 - PHP 자체에 정의된 이름(연산자들과 같은 각종 키워드),
                      함수명과 같이 프로그램 어느 곳에서나 제한없이 접근할 수 있는 이름
이와 같이 이름공간이 독립적으로 분리되어 있으므로 동일한 이름이 서로 다른 지역에 존재할 수 있도록 허용하고 있습니다.
[code php;gutter:false] <?php

$str = "전역 이름공간의 변수";

function test() {
$str = "지역 이름공간의 변수";
echo "$str<BR>\n";

global $str;
echo "$str<BR>\n";
}

test();

?> [/code]
위의 소스와 같이 같은 함수 내에서 지역변수와 전역변수가 동시에 나타난다면 먼저 전역 이름공간을 참조하게 될 것입니다. 따라서 이 소스를 실행하면 아래와 같이 나타날 것입니다. 위의 소스와 같이 함수 내에서 사용되는 변수명은 지역 이름공간에서 찾게 됩니다. 전역 이름공간의 이름을 사용하려면 global 키워드로 먼저 선언해주어야 합니다.
지역 이름공간의 변수
전역 이름공간의 변수
함수마다 별도의 이름공간을 제공해 주기때문에 앞에서 설명한 모듈화가 가능하게 되지요.
만약 이름공간 안에 없는 이름을 참조한다면 어떻게 될까요? 물론 어떻게 처리하는가에 대한 매카니즘은 그 대상이 변수냐 함수냐 등에 의해 다르게 처리되겠지요. 변수인 경우라면 참조한 위치가 전역 위치면 전역 이름공간을 살펴보고 없으면 전역 이름공간에 새로운 이름을 생성합니다. 그리고 참조한 위치가 함수 내와 같은 지역 위치면 해당 함수의 지역 이름공간을 살펴보고 없으면 이 공간에 새로운 이름을 생성합니다.
함수라면 좀더 복잡할 것입니다. 함수를 정의하면서 함수명을 이름공간에 생성하려고 할 때 이미 해당 이름공간에 함수명이 있다면 중복된 함수 정의라는 에러메시지를 보여줄 것입니다. 반면에 함수를 실행하려고 이름공간을 참조하였을 때 이 이름공간에 해당 함수명이 없다면 정의된 함수가 없다고 에러메시지를 보여줄 것입니다.
여러 해동안 웹프로그래밍을 하다보면 나도 모르는 사이에 많은 함수들이 하드디스크에 쌓여가는 것을 볼 수 있습니다. 이 양은 적지 않은 분량으로 이러한 함수를 이용하여 파일 입출력을 다루고, 문자열을 편리하게 처리하도록 도움받게 됩니다.
그런데 이러한 함수의 분량이 쌓여가다보면 개발자는 동일하거나 비슷한 기능의 함수를 다시 작성하는 경우도 빈번하고 더 나아가 동일한 함수명을 사용하는 경우도 발생합니다.
PHP 는 이와 같이 동일한 함수명을 중복하여 정의하여 사용할 경우 에러를 발생시켜 줍니다. 이와 같이 프로그램에서 중복된 이름을 사용할 때 이를 방지하기 위한 매카니즘이 동작하여 이에 의해 중복된 이름을 사용하였을 때 강제적으로 에러를 발생시키도록 하는 것입니다. 이와 같이 해당 이름공간 안에 있는 모든 함수는 자신만의 이름을 가지게 됩니다.
PHP 에서는 대부분 함수를 이용하여 라이브러리를 구축할 때 파일 단위로 묶어 놓게 됩니다. 그런데 파일 단위로 묶여 있는 라이브러리마다 라이브러리 내에서 발생하는 사용자 정의 에러를 처리하기 위하여 에러를 처리하는 함수를 정의하여 사용하게 되지요. 예를 들면 아래와 같이 warning() 함수를 정의하게 됩니다.
[code php;gutter:false] function warning($msg) {
?>
<SCRIPT language=JavaScript>
<!--
window.alert("<?php echo $msg ?>");
//-->
</SCRIPT>
<?php
} [/code]
이러한 에러 처리 함수는 각 라이브러리마다 조금씩 다르게 정의할 수도 있고 때에 따라서는 동일하게 정의할 수도 있겠지요. 그런데 만약 a라는 라이브러리와 b라는 라이브러리에 모두 이와 같은 에러 처리 함수 warning() 함수가 있고 우연히 동일한 웹페이지에서 a와 b 라이브러리를 모두 불러들였다고 하지요. 웹페이지를 실행하면 PHP는 당연히 이름공간 매카니즘에 의해 중복된 함수를 정의하였다는 에러를 신속히 보여줄 것입니다.
여러분은 이러한 에러를 방지하기 위해 나름대로 대책을 세우셨을 것입니다. 에러 처리 함수를 별도의 파일로 구성하여 놓을 수도 있겠지요. 그리고 a와 b 라이브러리에서 에러 처리 함수가 포함된 파일을 포함(include)하겠지요.
아니면 a라는 라이브러리의 에러 처리 함수명을 warning() 대신에 a_warning()로 변경하고, b라는 라이브러리의 에러 처리 함수명을 b_warning()로 변경할 수도 있겠지요.
결국 어떠한 대책이 되었든지간에 함수를 이용하는 한은 불편하기도 하고 실수할 가능성도 상당히 높습니다. 그래서 PHP는 함수라는 도구보다 더욱 강력한 도구인 클래스라는 것을 우리에게 선물로 주었습니다. 위의 예에서 발생한 이름공간 문제를 클래스를 이용하여 해결하여 보지요.
[code php;gutter:false] class a {
function warning($msg) {
?>
<SCRIPT language=JavaScript>
<!--
window.alert("<?php echo $msg ?>");
//-->
</SCRIPT>
<?php
}
}

class b {
function warning($msg) {
?>
<SCRIPT language=JavaScript>
<!--
window.alert("<?php echo $msg ?>");
//-->
</SCRIPT>
<?php
}
} [/code]
여기서 클래스 a와 b가 동일한 파일에 있어도 좋고 다른 파일에 있어도 관계없겠지요. 일단 위와 같이 클래스 a, b 내에 동일한 이름의 에러 처리 함수(메소드) warning()를 정의하여 놓더라도 이름공간 문제가 발생하지 않습니다. 왜냐하면 클래스 a와 b는 서로 다른 이름공간을 가지게 되니까요.
그런데 에러 처리 함수를 클래스의 멤버로 정의하지 않고 일반 함수로 정의하게 되면 이 함수명은 전역 이름공간(global name space)에 있게 됩니다. 동일한 이름공간 내에서는 중복된 이름을 가질 수 없기 때문에 결국 일반 함수로 정의하면 문제가 발생하는 것이지요.
반면 클래스는 각 클래스마다 독립적인 이름공간을 가지기 때문에 함수명이 중복되어도 에러가 발생하지 않습니다. 아울러 클래스에서는 오버로딩, 오버라이딩과 같은 특성을 제공하기 때문에 이름공간의 융통성(?)이 막강하지요.
[주의] PHP에서는 오버로딩을 지원하지 않습니다. 오버라이딩도 너무 포괄적(?)으로 지원합니다.
함수를 통해 모듈화를 하더라도 여러 개의 함수가 모이다보면 함수명의 중복으로 인하여 문제가 발생하는 것입니다. 일반 함수명은 모두 동일한 전역 이름공간에 생성되며 따라서 함수가 많을 때는 중복될 가능성이 많아지게 됩니다. 중복되지 않도록 개발자가 직접 관리해야 하는데 사람이라는 것이 워낙 실수도 많고 기억에도 한계가 있다보니 자연히 한계에 부딪치게 되지요.
결국 여러 개의 함수로 구성된 라이브러리와 같은 경우에서는 라이브러리 전체를 하나의 모듈로 묶어줄 수 있는 강력한 모듈화 도구인 클래스로 감싸줌으로써 함수명의 중복에 따른 문제를 쉽게 해결할 수가 있는 것이지요.

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:22
모듈화 프로그래밍에서 우리는 함수를 이용하여 모듈화를 할 수 있다는 것을 알았습니다. 그런데 함수를 이용한 모듈화에는 한계가 있습니다. 하나의 함수 내에서 사용할 변수는 얼마든지 정의하여 사용할 수 있습니다. 즉 지역변수지요. 그런데 만약 2개 이상의 함수에서 공유해야 할 변수가 필요하다면 어떻게 할까요. 전역변수 외에는 방법이 없지요. 그런데 모듈화의 개념이 무엇이라고 앞에서 말씀드렸지요? 바로 블랙박스입니다. 블랙박스 안의 내용은 절대로 불법적(함수를 통한 정상적인 방법으로 접근하지 않는 것을 의미)으로 접근되어서는 안됩니다. 그런데 2개 이상의 함수에서 공유해야할 변수로 전역변수를 이용한다면 이 전역변수는 공유하고 있는 2개 이상의 함수 이외의 곳에서도 얼마든지 접근이 가능하지요. 모듈화 개념에서 벗어나는 것이지요.
아래와 같은 함수가 있다고 가정하지요. 왜 이렇게 작성했는가는 따지지 마세요. 설명하기 위한 것이니까요.
여기에서 $str은 함수 내에서만 사용할 수 있는 지역변수(local variable)입니다. $str 값은 get_string() 함수의 리턴값으로만 반환받을 수 있지 다른 방법으로는 접근할 수가 없습니다. 따라서 이 함수는 모듈화 개념에 맞게 잘 작성된 것입니다.
[code php;gutter:false] function get_string() {
$str = "1234567890";

return $str;
} [/code]
이것을 몇 개의 함수를 이용하여 문자열 자르기를 위한 라이브러리로 확장시켜보지요.
[code php;gutter:false] /*
문자열 자르기를 위한 라이브러리(일반 함수를 이용할 때)
*/

$bank;

function get_string() {
global $bank;
return $bank;
}

function set_string($str) {
global $bank;
$bank = $str;
}

function cut_string($len) {
global $bank;
$bank = substr($bank, 0, $len);
}

set_string("1234567890");
cut_string(4);
echo get_string(); // "1234"가 출력되겠지요. [/code]
set_string() 함수를 이용하여 자르고자 하는 문자열을 지정하고, cut_string() 함수를 이용하여 자를 문자열 길이를 지정하여 자르고, get_string() 함수를 이용하여 자른 문자열을 돌려받습니다.
이와 같이 문자열 자르기를 위하여 몇 개의 함수를 모아서 라이브러리화 시켰더니 모든 함수가 공유해야할 $bank 변수가 필요해 졌습니다.
이렇게 작성된 문자열 자르기 라이브러리를 볼 때 모듈화 관점에서 문제점이 무엇입니까? 앞에서도 언급하였듯이 모듈화가 되려면 함수명, 입력값, 출력값 외에는 외부세계에서 접근이 불가능해야 합니다. 그런데 $bank 변수가 전역변수(global variable)로 사용되다보니 문자열 자르기 라이브러리 외의 어느 곳에서도 쉽게 접근할 수 있는 화이트박스(?)가 되어 버렸지요.
이것이 함수를 이용한 모듈화의 한계입니다. 2개 이상의 함수에서 공유해야할 변수를 블랙박스 내에 담을 수 있는 도구가 바로 클래스입니다. 클래스라는 도구를 통해 모듈화가 보다 완전해 지는 것이지요.
[code php;gutter:false] /*
문자열 자르기를 위한 라이브러리(클래스를 이용할 때)
*/

class string {
var $bank;

function get() {
return $this->bank;
}

function set($str) {
$this->bank = $str;
}

function cut($len) {
$this->bank = substr($this->bank, 0, $len);
}
}

$string = & new string; // 객체 $string의 생성

$string->set("1234567890");
$string->cut(4);
echo $string->get(); // "1234"가 출력되겠지요. [/code]
[주의] PHP 와 C++ 언어에서 클래스를 이용할 때의 모듈화의 완전성을 비교해 볼 때 PHP의 모듈화는 다소 덜 완전합니다. 즉, C++에서는 액세스 권한(access right) 지정자 private를 이용하면 클래스 외부 세계에서는 해당 변수에 절대로 접근할 수 없으나 PHP에서는 아직 액세스 권한 지정자 개념이 도입되지 않았기때문에 객체를 통하여 변수에 접근할 수가 있습니다. 그러나 역시 객체를 통하지 않고는 접근할 수 없다는 면에서 볼 때 일반 함수를 통한 모듈화보다는 훨씬 뛰어난 모듈화 성능을 보여주고 있습니다.
[참고] PHP 가 아닌 C++ 또는 java와 같은 객체지향 프로그래밍에서의 변수의 사용범위는 더욱 다양합니다. 다른 말로하면 복잡하다는 말이기도 하지요. public, private, protected와 같은 액세스 권한 지정자에 의해 클래스 내에서의 사용범위를 조절할 수 있습니다.

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:21
우리도 웹 문서를 옛날 GW-BASIC에서 하던 것처럼 함수를 전혀 사용하지 않고도 작성할 수 있습니다. 그런데 왜 함수를 사용합니까? 가장 중요한 것이 모듈화이지요. 입력값과 출력값만 공개되어 있지 내부에서 이 값들이 어떻게 처리되는 지는 알 수 없지요.
요즘 게시판에 가면 심심치않게 등장하는 문자열 자르기 함수를 예로 들어보지요.
[code php;gutter:false] /*
함수명 : cut_string
입력값 : string, length
출력값 : string
기 능 : 지정된 문자열에서 지정된 글자수만큼만 되돌려 준다.
*/

function cut_string($str, $len) {
return substr($str, 0, $len);
} [/code]
이 문자열 함수를 이용하는 개발자에게 필요한 것은 함수명, 입력값, 출력값입니다. 그 외에 함수 내부적으로 입력값이 어떻게 처리되어 출력값을 내보내는지에 대하여는 전혀 알 필요도 없습니다.
만약 이 함수를 개선하여 2바이트 문자(한글 등)도 정상적으로 처리되도록 하기 위해서는 아래와 같이 함수 내부를 수정하여야 할 것입니다. 그러나 이 함수를 이용하고 있는 소스는 전혀 수정할 필요가 없겠지요. 입력값과 출력값이 같으니까요.
[code php;gutter:false] /*
함수명 : cut_string
입력값 : string, length
출력값 : string
기 능 : 지정된 문자열에서 지정된 글자수만큼만 되돌려 준다.
2바이트 문자(한글 등)도 정상적으로 처리되도록 한다.
*/

function cut_string($str, $len) {
if(strlen($str)<$len) {
return $str; //지정된 길이보다 문자열이 작으면 그냥 리턴
}

for($i=0; $i<$len-1; $i++) {
if(ord($str[$i])>127) {
$i++; //한글일 경우 2byte 이동
}
}

return substr($str,0,$i);
} [/code]
이와 같이 함수를 이용하면 함수 내를 하나의 블랙박스로 숨겨놓을 수 있습니다. 외부 세계와는 완전히 차단된 독립적인 세계이지요. 모듈화 프로그래밍은 이와 같이 부분적인 기능들을 모두 블랙박스로 만들어 놓은 후에 이러한 블랙박스를 하나하나 조립하여 전체적으로 완성시켜가는 것입니다.
여러분은 알게모르게 이미 함수를 통해 모듈화 프로그래밍을 하고 있으며 이를 통해 프로그램 개발에 많은 향상과 이점을 가질 수 있었습니다. 이러한 모듈화 개념은 프로그래밍을 하는데 없어서는 안될 무지무지하게 중요한 개념이지요. 함수를 통해 구현되는 모듈화는 함수 내의 정보를 외부세계와 독립적으로 구성하기 위한 것이며 다른 말로 하면 함수 내의 정보를 숨기기 위한 것입니다.
객체지향 프로그래밍에서의 캡슐화(encapsulation)라는 개념도 모듈화 개념과 비교할 때 그 역할이 동일합니다. 즉 블랙박스화이지요. 단지 블랙박스화 하기 위한 도구와 그 대상이 다를 뿐입니다. 모듈화의 도구로 함수를 이용하였듯이 캡슐화의 도구로 클래스를 이용할 뿐입니다. 캡슐화에 대하여는 더 이상 깊이 들어가지 않겠습니다. 그러나 분명히 이해하여야 할 것은 그 역할이 모듈화와 동일하다는 것입니다. 그래서 이 문서에서는 앞으로 클래스를 이용한 캡슐화를 그냥 모듈화라고 부르기로 하겠습니다.
이제는 아래와 같은 도식을 얻을 수 있겠지요.
모듈화 = 캡슐화 = 블랙박스화

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:20
1990 년대초에 객체지향 프로그래밍(Object-Oriented Programming)이라는 방법이 나타나기 전까지는 파스칼 또는 C를 중심으로한 구조화/모듈화 프로그래밍(Structured/Modular Programming)이 전세계를 지배하고 있었습니다.
2002 년을 보내고 있는 현시점까지도 웹프로그래밍 언어인 PHP에서는 구조화/모듈화 프로그래밍의 지배를 받고 있지요. 그러나 구조화/모듈화 프로그래밍에는 많은 문제가 있기 때문에 PHP도 객체지향 프로그래밍쪽으로 점점 무게가 실리게 될 것입니다.
어쨌든지간에 현재까지도 PHP를 지배하고 있는 구조화/모듈화 프로그래밍에 대하여 먼저 알아보고 그 다음에 과연 구조화/모듈화 프로그래밍을 할 때도 과연 객체지향 프로그래밍의 도구인 클래스를 사용해야 하는가에 대하여 숙고해 보도록 하겠습니다.
그럼 우선 클래스의 필요성을 살펴보기 전에 구조화/모듈화 프로그래밍에 대하여 살펴보도록 하겠습니다.
1970 년대에 제안된 구조적 기법(구조화/모듈화 프로그래밍)을 통하여 프로그래머는 체계적인 방법으로 보다 쉽게 프로그램을 작성할 수 있을 뿐만 아니라, 일단 작성된 프로그램은 누구나가 쉽게 읽고 이해할 수 있어서 이후에 프로그램을 쉽게 수정할 수 있었습니다.
구조화 프로그래밍(Structured Programming)
프로그램이 커지고, 기능이 복잡해지면 개발 뿐만 아니라 수정과 유지 보수에 오히려 더 많은 시간과 노력이 필요하게 됩니다. 이러한 문제에 대처하기 위하여 프로그램의 구조를 순차, 선택, 반복 제어 구조만으로 설계하여 처리 절차를 간단하고 명료하게 표현할 수 있는 구조화 프로그래밍 기법이 나타나게 되었습니다.
▶순차 처리
▶선택 처리
▶반복 처리
그 옛날 BASIC에서의 Go To문과 같은 분기를 허용하지 않고 일의 순서에 따라 시작부터 끝까지 한 방향으로 진행하도록 처리하는 것이 "순차 처리"이며, if 또는 switch 문과 같이 주어진 조건에 따라 명령문을 선택하여 처리하는 구조가 "선택 처리"이며, while, for next 문과 같이 주어진 조건을 만족할 때까지 일정한 범위의 명령문들을 반복 수행하는 구조가 "반복 처리" 구조입니다.
구조화 프로그래밍은 프로그램의 구조가 논리적으로 구성되어 있어 아래와 같은 특징을 가지게 됩니다.
▶코딩이 쉽다(분석,설계,제작)
▶프로그램을 읽기 쉽게 한다(가독성)
▶테스트를 쉽게 한다(테스트)
▶수정하기 쉽다(유지 보수)
모듈화 프로그래밍(Modular Programming)
프로그램을 작성할 때 큰 프로그램을 한번에 작성하는 것이 아니라 기능별로 나누어 우선 부분별 작성을 한 다음, 각각의 작은 프로그램들을 서로 연결시켜 하나의 완성된 프로그램을 만드는 방법으로 기능별로 나누어진 각 모듈은 각각 이 하나의 기능을 수행하며 그 기능을 수행하기 위하여 필요한 모든 코드와 변수를 포함하도록 하는 프로그래밍 방식입니다.
프로그램 덩치가 큰 프로그램을 모듈별로 나누지 않고 단지 구조화 프로그래밍만을 이용하여 하나로 작성하기는 무척 어렵습니다. 그러나 구조화 프로그래밍을 적용하기 전에 먼저 모듈화 프로그래밍을 적용한 후에 각 모듈별로 구조화 프로그래밍을 적용하게 되면 그 구현이 매우 쉽게 됩니다.
모듈화 프로그램밍은 아래와 같은 특징을 가짐으로 말미암아 구조화 프로그래밍과 마찬가지로 프로그램의 구조가 논리적으로 구성되어 있어 프로그램의 작성/수정이 용이하고, 이해하기가 쉽습니다.
▶하나의 모듈은 유일한 하나의 입구(Entry point)와 유일한 출구(Exit point)를 갖는다.
▶하나의 모듈은 독립적인 구조를 갖는다.
   (프로그램내에서 하나의 독립적인 기능을 수행)
▶모듈은 개별적으로 테스트가 가능하다.

Posted by 방글24
phpclass/클래스활용2002. 9. 13. 10:09
부제:클래스를 이용한 모듈화 프로그래밍
PHP 를 가지고 웹프로그래밍을 하면서 과연 클래스를 사용해야 하는지에 대하여 살펴보겠습니다. 클래스가 객체지향 프로그래밍의 도구이기는 하지만 여기서는 객체지향개념을 도입하지 않고 구조화/모듈화 프로그래밍에서의 모듈화 개념, 좀더 구체적으로 말하면 스코프(scope)와 이름공간(name space)이라는 개념을 가지고 클래스를 사용할 필요가 있는지에 대하여 살펴보고자 합니다. 객체지향개념을 가지고 클래스를 사용해야 한다고 설명하면 반론이 만만치(?) 않을 것이기 때문에 가능한한 불필요한 논쟁을 피하고자 합니다.
본인의 전공이 컴퓨터 공학 내지는 소프트웨어 공학이 아닌 고로 이론적인 면에 서투른 점이 많이 보일 것입니다. 그러한 부분은 기탄없이 지적하여 주시면 감사하겠습니다.

Posted by 방글24
phpclass/클래스활용2000. 10. 19. 14:44
객체의 형변환(type casting)
스칼라값(integer, double, string)을 객체로 형변환하면, 그 값은 해당 객체의 'scalar'라는 멤버변수의 값이 된다.
[code php;gutter:false] $var = 'ciao';
$obj = (object) $var;
echo $obj->scalar; // 'ciao'를 출력 [/code]
객체를 스칼라값(integer, double)으로 형변환하면 의미없는 숫자 "1" 또는 "1.0"으로 되며, 문자열로 형변환하면 객체 내용에 관계없이 "Object"라는 문자열로 되며, 배열로 형변환하면 객체의 멤버변수명을 첨자로 하는 연관배열(associative array)로 됩니다.
[code php;gutter:false] <?php

class test {
var $a = 10;
var $b = 20;
function test() {
$this->c = 30;
}
}

$obj = new test;

$a = (int) $obj;
echo "object->integer : ".$a."\n";

$a = (double) $obj;
echo "object->double : ".$a."\n";

$a = (string) $obj;
echo "object->string : ".$a."\n";

$a = (array) $obj;
reset ($a);
while (list($k, $v) = each ($a))
echo "\$a[$k] = $v\n";

?> [/code]
< 예제 소스 >
object->integer : 1
object->double : 1
object->string : Object
$a[a] = 10
$a[b] = 20
$a[c] = 30
< 실행 결과 >
gettype(), settype(), is_object() 함수
print_r() 함수

Posted by 방글24