PHP

[PHP] 14. Object Oriented Programming1 (객체 지향의 필요성)

러셀가의 집사 2017. 11. 26. 06:13











Object Oriented Programming1









기존에 점점 더 복잡해 지는 코드들을 감당하기 위해 함수라는 것이 출현했지만,



코드들이 더욱 더 복잡해짐에따라, 새로운 대책이 필요하게 되었고, 그 방안으로 나온 것이 객체(Object)라는 것이다.



객체라는 것은 함수들과 변수들로 구성되어 있다.





자세한 이야기는 아래의 예제를 통해서 알아보도록 하자.




소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<h1>Function</h1>
<?php
var_dump(is_file('data.txt'));
var_dump(is_dir('data.txt'));
var_dump(file_get_contents('data.txt'));
file_put_contents('data.txt', rand(1,100));
?>
<h1>Object</h1>
<?php
$file = new SplFileObject('data.txt');
var_dump($file->isFile());
var_dump($file->isDir());
var_dump($file->fread($file->getSize()));
$file->fwrite(rand(1,100));
$file2 = new SplFileObject('data2.txt');
var_dump($file2->isFile());
var_dump($file2->isDir());
var_dump($file2->fread($file2->getSize()));
$file2->fwrite(rand(1,100));
// SplFileObject : Class
// $file, $file2 : Instance
// isFile, isDir, fread : Method(function)
// data.txt, data2.txt : state
?>


위의 예제는 총 3개지 파트로 구성되어있다. 



그 중 첫번째는 함수를 이용해서 만든 예제이지만, 나머지 두번째와 세번째 파트는



동일한 작업을 객체를 이용하여 만든 것이다.



함수를 이용하건, 객체를 이용하건, 위의 경우에서는 의도대로 동일하게 만들 수 있었으나,








함수를 이용해 만든 예제에는 몇가지 단점이 존재한다. 





첫번째data.txt 라는 변수가 겹친다. 이는 유지 보수(수정)가 불편함을 의미한다.





두번째, 동일한 기능을 가진 또 다른 대상을 정의하고 싶을 때, 함수 정의 자체를 동일하게 반복해야한다.




이에 반해, 객체를 이용할 경우, 클래스(Class)에 이미 필요한 함수들이 정의되어 있으므로, 그런 수고를 더 이상 하지 않아도 된다.






아래는 배열, 함수와 객체를 이용한 예시이다.


코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<h1>Function Style</h1>
<?php
$adata = array('a', 'b', 'c');
array_push($adata, 'd');
foreach($adata as $item){
echo $item.'<br>';
}
var_dump(count($adata));
?>
<h1>Object Style</h1>
<?php
$odata = new ArrayObject(array('a', 'b', 'c'));
$odata->append('d');
foreach($odata as $item){
echo $item.'<br>';
}
var_dump($odata->count());
?>



첫 번째는 함수만을 이용한 예시, 두 번째는 객체를 이용한 예시이다.



함수만을 이용한 예시의 경우, $adata 라는 변수를 각 함수들을 호출 할 때마다 호출해 주어야함을 볼 수 있다.




반면, 객체를 이용한 예시의 경우, 대부분의 경우 그럴 필요가 없다.



이미, 객체와 변수를 통해, 특정 대상을 지정해 놓았기 때문이다.






물론, 위의 경우는 코드가 상대적으로 짧기때문에, 체감이 되지 않을 수도 있지만, 수백 줄 이상의 코드라고 가정하면



객체의 효용을 짐작할 수 있다.




코드 출처: opentutorials.org