본문 바로가기

   
Programming/PHP

PHP 객체지향 프로그래밍

반응형

PHP 객체지향 프로그램

객체지향의 대한 개념부터 이해해야지만 프로그래밍 언어로 객체 지향을 구현할수 있습니다.


객체지향에 대한 개념을 사람으로 표현해보자면 사람의 신체 기능 중에는

듣다, 말하다, 먹는다, 냄새를 맡는다 등 여러기능이 있습니다.


이것을 프로그래밍 언어로 표현합니다.


먼저 사람이라는 클래스를 만듭니다. 프로그래밍 언어로는 다음과 같이 표현합니다.


듣다, 말하다,먹는다 기능을 프로그래밍 언어로 표현해야겠지요.


class 사람{

  function 듣다(){

     echo("귀입니다 전 들을수가 있쬬");

  }


 function 말하다(){

     echo("전입입니다. 말할수가 있습니다.");

 }


 function 먹는다(){

echo("저도입이지만 전먹을수가 있습니다.")

 }

}


위처럼 표현합니다. 프로그래밍 언어에서 객체지향 언어를 쓰는 이유는 이러한 기능들을 만들어 놓으면 언제든지 다른 소스에서 첨부해서 쓸수 있는 장점이있고 이식성이라고하죠(portability) 이러한 장점이 있습니다.

또다른 장점으로는 상속(inheritance)이라는 장점이있는데 만들어 놓은 기능을 그대로 가져와 다른 메소드에서 기능을 사용할수 있는 장점이 있습니다.


그럼 다시한번 객체를 생성하는 테스트를 해보겠습니다.


Test.php

<?
	//객체생성을위한 클래스 선언
	class Human {
		
		//걷는 기능과 먹는 기능을 넣기위한 변수 선언
		var $Walk = "";
		var $Eat = "";

		//걷기 기능
		function ToWalk(){
			echo($this->ToWalk. " 걷는다");
		}

		//먹기 기능
		function ToEat(){
			echo($this->ToEat. " 먹는다.");
		}
	}

	//new 연산자를 통해 객체를 생성해야지만 걷기와 먹기 기능을 이용할수 있습니다.
	$human = new Human();

	//human에는 클래스 Human이 있고 안에 기능들에 접근 할수 있습니다.
	//그래서 Human클래스에 ToWalk, ToEat기능에 문자를 전달 해줍니다.
	$human -> ToWalk = "빨리";
	$human->ToEat = "천천히";

	//걷는다 기능을 호출
	$human->ToWalk();

	echo("<br>");

	//먹는다 기능을 호출
	$human->ToEat();
?>

* 참고 PHP에서 화살표 키워드가 의미하는것은 $human->ToEat 이런 코드가 생소 할텐대 일반적으로 .은 문자열을 이어붙일때 주로 사용하고 -> 화살표는 클래스안에 들어있는 값을 지칭할떄 많이 쓰입니다. 그냥 사용법이라고 생각하시면 될것 같습니다.


결과



위처럼 한번 만들어 놓는 클래스와 기능들을 후에 유지보수나 기능 추가 하는데에 있어서 굉장히 유용 합니다.





PHP 접근 제한자 사용

말그대로 제가만든 기능들에 대한 접근을 제한하는 겁니다. 모든 객체 지향 언어에서 사용하는 방법으로 c#, java도 다를게 없습니다. 


PHP5 이전 까지는 var 키워드를 사용했다고 합니다. PHP5 에서도 var 키워드로 변수를 선언 할수 있지만 객체 지향언어 답게 아래 3가지 방법으로 사용 해야 겠습니다.


접근제한자에는 3가지가 있습니다.

public : 어디서나 접근 가능함 모두 오픈

protected : 클래스 내부에서만 접근 가능함.  상속 가능

private : 클래스의 내부에서만 접근 가능.  상속 불가능


접근이 되는지 안되는 아래 코드를 통해 테스트 해보겠습니다.

Test.php

<?
	class TestAccess{
		public $publicCheck = "public 어디든 접근 ok";
		protected $protectedCheck = "상속하면 접근 ok";
		private $privateCheck = "상속x 클래스 내에서만 접근 ok";
		
		//위에선언한 변수를 하나씩 출력 해보자.
		function printAccess(){
			echo("1 public : ". $this->publicCheck);
			echo("<br>1 protected : ". $this->protectedCheck);
			echo("<br>1 privateCheck : ". $this->privateCheck);
		}
	}

	//extends -> TestAccess를 상속 받겠다.
	class TestAccessChild extends TestAccess{
		//위에선언한 변수를 하나씩 출력 해보자.
		function printAccess(){
			echo("<br>2 public : ". $this->publicCheck);
			echo("<br>2 protected : ". $this->protectedCheck);
			echo("<br>2 privateCheck : ". $this->privateCheck);
		}
	}

	$access = new TestAccess();
	$access->printAccess();

	$accessChild = new TestAccessChild();
	$accessChild->printAccess();
?>

결과를 보면 private을 제외한 변수에 모두 접근이 되었습니다.

protected는 상속해서 접근해봤는데 private 으로 선언한 변수엔 접근이 되지 않는군요.


결과


위 테스트를 보면 private이 보안이 젤좋네요.






반응형