PHP - 캡슐화
캡슐화는 객체 지향 프로그래밍(OOP)의 기본 원칙 중 하나입니다. 데이터와 그 데이터를 조작하는 메서드를 함께 묶는 것을 의미합니다. PHP에서는 클래스와 공개(public), 비공개(private), 보호(protected)와 같은 접근자를 사용하여 캡슐화를 달성할 수 있습니다. 이 튜토리얼은 PHP에서 캡슐화의 기본을 안내하며, 공개 회원(public members)에서 시작하여 비공개 회원(private members)으로 넘어가고, 마지막으로 보호 회원(protected members)을 다룹니다.
공개 회원
공개 회원은 클래스 내부와 외부 모두에서 접근할 수 있습니다. public
키워드를 사용하여 선언됩니다. 다음은 공개 회원을 가진 간단한 클래스의 예입니다:
class Car {
public $color;
public function setColor($color) {
$this->color = $color;
}
public function getColor() {
return $this->color;
}
}
$myCar = new Car();
$myCar->setColor("red");
echo "My car is " . $myCar->getColor() . "."; // 출력: My car is red.
이 예제에서 우리는 Car
클래스와 공개 프로퍼티 $color
, 그리고 두 개의 공개 메서드 setColor()
과 getColor()
을 가집니다. 클래스 외부에서 차의 색상을 쉽게 설정하고 가져올 수 있습니다.
비공개 회원
비공개 회원은 정의된 클래스 내부에서만 접근할 수 있습니다. private
키워드를 사용하여 선언됩니다. 다음은 비공개 회원을 가진 클래스의 예입니다:
class BankAccount {
private $balance;
public function __construct($initialBalance) {
$this->balance = $initialBalance;
}
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
}
}
public function getBalance() {
return $this->balance;
}
}
$myAccount = new BankAccount(100);
$myAccount->deposit(50);
echo "My account balance is " . $myAccount->getBalance() . "."; // 출력: My account balance is 150.
이 예제에서 우리는 BankAccount
클래스와 비공개 프로퍼티 $balance
, 그리고 두 개의 공개 메서드 deposit()
과 getBalance()
를 가집니다. $balance
프로퍼티는 클래스 외부에서 직접 접근할 수 없지만, deposit()
메서드를 사용하여 조작하고 getBalance()
메서드를 사용하여 값을 가져올 수 있습니다.
보호 회원
보호 회원은 정의된 클래스 내부와 하위 클래스 내부에서 접근할 수 있습니다. protected
키워드를 사용하여 선언됩니다. 다음은 보호 회원을 가진 클래스의 예입니다:
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
public function bark() {
echo "Woof! I am " . $this->name . ".";
}
}
$myDog = new Dog("Buddy");
$myDog->bark(); // 출력: Woof! I am Buddy.
이 예제에서 우리는 Animal
클래스와 보호 프로퍼티 $name
을 가집니다. Dog
클래스는 Animal
클래스를 확장하며, 보호된 $name
프로퍼티에 접근할 수 있습니다. Dog
클래스 내부에서 $name
프로퍼티를 사용하여 bark()
메서드를 구현할 수 있습니다.
결론
캡슐화는 데이터의 통합성을 유지하기 위해 데이터에 대한 직접 접근을 제한하는 OOP의 중요한 개념입니다. 공개(public), 비공개(private), 보호(protected)와 같은 접근자를 사용하여 데이터에 대한 접근과 수정을 제어할 수 있습니다. 캡슐화를 이해하면 PHP와 다른 OOP 언어에서 더 강력하고 유지보수 가능한 코드를 작성하는 데 도움이 될 것입니다.
Credits: Image by storyset