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