객체 지향 프로그래밍이 가지는 특징
1. 추상화(abstraction)
2. 캡슐화(encapsulation)
3. 정보 은닉(data hiding)
4. 상속성(inheritance)
5. 다형성(polymorphism)
클래스의 구조
class 클래스이름
{
클래스의 프로퍼티과 메소드의 정의;
}
생성자(constructor)
클래스는 새로운 객체를 생성할 때마다 생성자(constructor)라는 메서드를 호출
PHP에서 생성자의 이름은 __construct()로 정해져 있음
생성자는 객체가 생성될 때마다 자동으로 호출되므로, 사용자가 직접 호출할 필요가 없다.
class 클래스이름
{
function __construct(매개변수1, 매개변수2, ...)
{
생성자가 호출될 때 실행될 코드;
}
}
소멸자(destructor)
해당 객체를 더는 사용하지 않아 삭제할 때 호출
소멸자의 이름은 __desturct()로 정해져 있음
class 클래스이름
{
function __desturct()
{
소멸자가 호출될 때 실행될 코드;
}
}
인스턴스의 생성
new 키워드를 사용하여 인스턴스를 생성할 수 있다.
$객체이름 = new 클래스이름(인수1, 인수2,...);
클래스 멤버에 접근
클래스의 프로퍼티에 접근하거나 메소드를 호출할 때는 화살표 기호(->)를 사용
$객체이름 -> 프로퍼티이름;
$객체이름 -> 메소드이름;
객체 내부에서 해당 인스턴스의 프로퍼티에 접근하고 싶을 때는 특별한 변수인 $this를 사용
접근 제어(access modifier)
PHP에서는 클래스 멤버에 public, private, protected 키워드를 사용하여 각각의 멤버에 대한 접근 제어를 명시
public으로 선언된 멤버는 외부로 공개되며, 해당 객체를 사용하는 어디에서나 직접 접근
private로 선언된 멤버는 외부로 공개되지 않으며, 해당 클래스의 멤버에서만 접근
protected로 선언된 멤버는 상위 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급
해당 클래스의 멤버와 해당 클래스를 상속받은 자식 클래스에서만 접근
class ClassName
{
public $publicVar;
private $privateVar;
protected $protected;
public function __constructor()
{
$this -> publicVar = "public property<br>";
$this -> privateVar = "private property<br>";
$this -> protectedVar = "protect property";
}
public function publicMethod()
{
echo "public method<br>";
}
private function protectedMethod()
{
echo "protected method<br>";
}
private function privateMethod()
{
echo"private method<br>";
}
}
$object = new ClassName();
echo $object->publicVar; //접근 가능
//echo $object ->protectedVar() //접근 불가능
//echo $object ->privateVar() // 접근 불가능
$object->publicMethod(); // 호출 가능
정보 은닉(data hiding)
public 메소드를 사용하면 해당 클래스의 private 멤버나 protected 멤버에도 접근 가능
public 메소드는 private 멤버나 protected 멤버와 프로그램 사이의 인터페이스(interface) 역할을 수행
class ClassName
{
private $privateVar;
public function __constructor()
{
$this->privateVar = "private property";
}
public function getValue()
{
return $this->privateVar;
}
public function setValue($value)
{
$this->privateVar = $value;
}
}
$object = new ClassName();
$object->setValue("hello"); //setValue()함수를 통해 $private의 값을 변경할 수 있음
echo $object->getvalue; //getValue()함수를 통해 $private의 값을 출력할 수 있음