PHP - 캡슐화

캡슐화는 객체 지향 프로그래밍(OOP)의 기본 원칙 중 하나입니다. 데이터와 그 데이터를 조작하는 메서드를 함께 묶는 것을 의미합니다. PHP에서는 클래스와 공개(public), 비공개(private), 보호(protected)와 같은 접근자를 사용하여 캡슐화를 달성할 수 있습니다. 이 튜토리얼은 PHP에서 캡슐화의 기본을 안내하며, 공개 회원(public members)에서 시작하여 비공개 회원(private members)으로 넘어가고, 마지막으로 보호 회원(protected members)을 다룹니다.

PHP - Encapsulation

공개 회원

공개 회원은 클래스 내부와 외부 모두에서 접근할 수 있습니다. 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