[PHP] 14. Object Oriented Programming1 (객체 지향의 필요성)
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